我写了一个简单的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);
我不知道如何解决它。我应该在我的小代码中改变什么?据我所知,我应该将指针传递给函数,但它应该与我所做的相同,因为向量名是向量本身的指针。
感谢您的帮助
答案 0 :(得分:2)
在C中它被称为“数组”,而不是“向量”。
您无法为数组指定值。
您宣布mul
已宣布为float
,但不返回任何内容 - 将其更改为void
。
当您致电mul
时,由于它不会返回任何内容,因此您不需要o=
。只需mul(r,o)
即可。
数组不是指针。也就是说,在大多数情况下,数组会衰减为指向其第一个元素的指针,包括您正在使用它的函数调用。同样,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);