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

How to pass vectors to a function in C

我写了一个简单的 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 填充向量 o;我需要保持变量的定义不变;我唯一应该修改的是功能。 当我通过键入 gcc main.c 运行 时,我收到如下错误消息:

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

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

感谢您的帮助

  1. 在 C 中它被称为 "array",而不是 "vector"。

  2. 不能给数组赋值。

  3. 您已将 mul 声明为 return 一个 float,但它没有 return 任何东西 - 将其更改为 void.

  4. 当你调用 mul 时,因为它没有 return 任何东西,你不需要 o=mul(r,o)就可以了

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

o=mul(r,o);

o 分配给 mul 函数的 return 值。但是 mul 没有 return 值——它根本没有 return 语句,也不需要语句,因为它直接对传递给它的数组进行操作。相反,只需声明它 void:

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

然后在没有赋值的情况下调用它:

mul(r, o);