我正在努力制作一个“兰顿的蚂蚁计划”。 我已经定义了一个结构:
typedef struct Ant
{
int x;
int y;
int b;
}Ant;
我有一个功能:
int st(Ant *ant, int len, char (*area)[len]);
但是当我尝试使用
在main函数中调用此函数时int main()
{
[..... ]
char r[l][l];
Ant ant;
ant.x = 0;
ant.y = 0;
ant.b = 2;
st(Ant *ant, l, r);
return 0;
}
我收到错误:'Ant'之前的预期表达式。
我看不出问题出在哪里。有人知道什么是错的。我对编码很新。
由于
答案 0 :(得分:6)
您的函数st
会将指针Ant
作为第一个参数,因此您需要传递变量ant
的地址(与实际指示的*
一样ant
)的内容。
更改以下行:
st(Ant *ant, l, r);
到:
st(&ant, l, r);
因为该函数的原型是:
int st(Ant *ant, int len, char (*area)[len]);
虽然您的原型不需要更改,但您也可以查看此原型,以使您的代码更具自我记录功能:
int st(Ant *ant, int len, char area[len][len]);
答案 1 :(得分:3)
在C中,*用于使用变量保持地址来获取该地址的值,而&运算符用于获取变量的地址
函数定义 - =if(A2="",C1,A2)
表示第一个参数应该是指向struct Ant的指针
所以你需要改变你的函数调用 -
st(Ant *ant,int len, char (* area)[len])
到 -
st(Ant *ant,l,r)
在函数调用中传递参数时也不需要指定类型。
答案 2 :(得分:3)
使用指针访问结构成员时 - >使用运算符代替。操作
尝试使用:
ant->x=0;
ant->y=0;
ant->b=2;
答案 3 :(得分:1)
欢迎来到C编程语言世界,
在C programming language
中,定义函数,声明函数和调用函数之间存在差异。
定义一个函数是你实际提供{}之间的定义(函数实际做了什么)的地方,如下所示:
//this is a definition
int addTwo(int a, int b)
{
return a + b
}
Declaring
函数只是告诉编译器有关函数的信息。通过提供名称,返回类型和参数类型来让它知道它存在。
//this is a declaration/prototype
int addTwo (int a, int b);
但是,要调用之前已声明的任何此类函数,我们需要按照函数声明中指定的正确顺序传递正确类型的变量(Compiler
只是讨厌那些混淆他的人)。
// To call addTwo
int first = 5;
int second = 10;
int result = addTwo(first, second);
您尚未在代码中指定变量r
的类型。我假设它是char (*)[len]
类型。要修复代码,请更改以下行:
st(Ant *ant, l, r);
到
st(&ant, l, r);