代码之家  ›  专栏  ›  技术社区  ›  Federico Gentile

如何将向量传递给C中的函数

  •  0
  • Federico Gentile  · 技术社区  · 10 年前

    我写了一个简单的C程序,因为我刚刚开始学习如何编程。 以下是主.c文件:

    #include <stdio.h>
    #include <stdlib.h>
    #include <assert.h>
    
    float mul(float r[],float o[]){
      o[0] = r[0]*11;
      o[1] = r[1]*22;
      o[2] = r[2]*33;
    }
    //==============================================================
    int main(void){
    float r[3];
    r[0]=1;r[1]=2;r[2]=3;
    float o[3];
    
    o=mul(r,o);
    
    return 0;
    }`
    

    我的目标是填充向量 o 通过使用函数 摩尔 ; 我需要保持变量的定义不变;我唯一应该修改的就是函数。 当我通过键入 gcc main.c 我收到如下错误消息:

    error: incompatible types when assigning to type ‘float[3]’ from type ‘float’
    o=mul(r,o);
    

    我不知道如何修复它。我应该在我的小代码中更改什么?据我所知,我应该将指向向量的指针传递给函数,但这应该与我所做的相同,因为向量名称是指向向量本身的指针。

    谢谢你的帮助

    2 回复  |  直到 10 年前
        1
  •  2
  •   Carl Norum    10 年前
    1. 在C中,它被称为“数组”,而不是“向量”。

    2. 不能为数组赋值。

    3. 你有 mul 声明为返回 float ,但它不会返回任何内容-将其更改为 void .

    4. 当你打电话时 摩尔 ,因为它不会返回任何内容,所以您不需要 o= 只是 mul(r,o) ,会好的。

    5. 数组是 指针。也就是说,在大多数上下文中,数组会衰减为指向其第一个元素的指针,包括您正在使用它的函数调用 float r[], float o[] 在您的 摩尔 函数签名只是 float *r, float *o .

        2
  •  0
  •   Lee Daniel Crocker    10 年前
    o=mul(r,o);
    

    受让人 o 的返回值 mul 作用但是 摩尔 没有返回值--它根本没有返回语句,也不需要返回语句,因为它直接对传递给它的数组进行操作 void :

    void mul(float r[], float o[]) {
        . . .
    

    然后调用它而不指定:

    mul(r, o);