如何将向量传递给 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);
而且我不知道如何修复它。我应该在我的小代码中更改什么?据我所知,我应该将指向向量的指针传递给函数,但它应该与我所做的相同,因为向量名称是指向向量本身的指针。
感谢您的帮助
在 C 中它被称为 "array",而不是 "vector"。
不能给数组赋值。
您已将 mul
声明为 return 一个 float
,但它没有 return 任何东西 - 将其更改为 void
.
当你调用 mul
时,因为它没有 return 任何东西,你不需要 o=
。 mul(r,o)
就可以了
数组不是指针。也就是说,在大多数情况下,数组确实会退化为指向其第一个元素的指针,包括您正在使用它的函数调用。同样,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);
我写了一个简单的 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);
而且我不知道如何修复它。我应该在我的小代码中更改什么?据我所知,我应该将指向向量的指针传递给函数,但它应该与我所做的相同,因为向量名称是指向向量本身的指针。
感谢您的帮助
在 C 中它被称为 "array",而不是 "vector"。
不能给数组赋值。
您已将
mul
声明为 return 一个float
,但它没有 return 任何东西 - 将其更改为void
.当你调用
mul
时,因为它没有 return 任何东西,你不需要o=
。mul(r,o)
就可以了数组不是指针。也就是说,在大多数情况下,数组确实会退化为指向其第一个元素的指针,包括您正在使用它的函数调用。同样,
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);