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

时间:2015-02-18 16:48:49

标签: c function vector

我写了一个简单的C程序,因为我刚开始学习如何编程。 这是main.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;
}`

我的目标是使用函数 mul 填充vector o ;我需要保持变量的定义;我唯一应该修改的是功能。 当我通过键入gcc main.c来运行它时,我收到如下错误消息:

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

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

感谢您的帮助

2 个答案:

答案 0 :(得分:2)

  1. 在C中它被称为“数组”,而不是“向量”。

  2. 您无法为数组指定值。

  3. 您宣布mul已宣布为float,但不返回任何内容 - 将其更改为void

  4. 当您致电mul时,由于它不会返回任何内容,因此您不需要o=。只需mul(r,o)即可。

  5. 数组不是指针。也就是说,在大多数情况下,数组会衰减为指向其第一个元素的指针,包括您正在使用它的函数调用。同样,float r[], float o[]函数签名中的mul只是语法糖float *r, float *o

答案 1 :(得分:0)

o=mul(r,o);

o分配给mul函数的返回值。但mul没有返回值 - 它根本没有return语句,也不需要返回语句,因为它直接在传递给它的数组上运行。相反,只需声明它void

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

然后在没有作业的情况下调用它:

mul(r, o);