如何在 C 中调用带有结构的函数?
How do I call a function with a struct in C?
我正在尝试制作 "Langton's ant program"。
我已经定义了一个结构:
typedef struct Ant
{
int x;
int y;
int b;
}Ant;
我有一个功能:
int st(Ant *ant, int len, char (*area)[len]);
但是当我尝试使用
在主函数中调用这个函数时
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' 之前需要表达式。
我看不出问题出在哪里。有人知道出了什么问题吗。我对编码很陌生。
谢谢
您的函数 st
将指向 Ant
的指针作为第一个参数,因此您需要传递变量 ant
的地址(与 *
一样实际上表示 ant
的内容)。
更改以下行:
st(Ant *ant, l, r);
至:
st(&ant, l, r);
因为函数的原型是:
int st(Ant *ant, int len, char (*area)[len]);
虽然你的原型不需要改变,但你也可以看看这个,让你的代码更self-documenting :
int st(Ant *ant, int len, char area[len][len]);
在C语言中,*用于与变量的保存地址一起获取该地址的值,而&运算符用于获取变量的地址。
函数定义 - st(Ant *ant,int len, char (* area)[len])
表示第一个参数应该是指向 struct Ant 的指针。
所以你需要改变你的函数调用 -
st(Ant *ant,l,r)
至 -
st(&ant,l,r).
而且在函数调用中传递参数时也不需要指定类型。
欢迎来到 C 编程语言的世界,
在C programming language
中定义函数、声明函数和调用函数是有区别的
定义函数是在 {} 之间实际提供定义(函数实际做什么),如下所示:
//this is a definition
int addTwo(int a, int b)
{
return a + b
}
Declaring
一个函数只是告诉编译器这个函数。您可以通过提供名称、return 类型和参数的数量/类型来让它知道它存在。
//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);
当您使用指针访问结构成员时 -> 使用运算符而不是 .运算符。
尝试使用这个:
ant->x=0;
ant->y=0;
ant->b=2;
我正在尝试制作 "Langton's ant program"。 我已经定义了一个结构:
typedef struct Ant
{
int x;
int y;
int b;
}Ant;
我有一个功能:
int st(Ant *ant, int len, char (*area)[len]);
但是当我尝试使用
在主函数中调用这个函数时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' 之前需要表达式。
我看不出问题出在哪里。有人知道出了什么问题吗。我对编码很陌生。
谢谢
您的函数 st
将指向 Ant
的指针作为第一个参数,因此您需要传递变量 ant
的地址(与 *
一样实际上表示 ant
的内容)。
更改以下行:
st(Ant *ant, l, r);
至:
st(&ant, l, r);
因为函数的原型是:
int st(Ant *ant, int len, char (*area)[len]);
虽然你的原型不需要改变,但你也可以看看这个,让你的代码更self-documenting :
int st(Ant *ant, int len, char area[len][len]);
在C语言中,*用于与变量的保存地址一起获取该地址的值,而&运算符用于获取变量的地址。
函数定义 - st(Ant *ant,int len, char (* area)[len])
表示第一个参数应该是指向 struct Ant 的指针。
所以你需要改变你的函数调用 -
st(Ant *ant,l,r)
至 -
st(&ant,l,r).
而且在函数调用中传递参数时也不需要指定类型。
欢迎来到 C 编程语言的世界,
在C programming language
中定义函数、声明函数和调用函数是有区别的
定义函数是在 {} 之间实际提供定义(函数实际做什么),如下所示:
//this is a definition
int addTwo(int a, int b)
{
return a + b
}
Declaring
一个函数只是告诉编译器这个函数。您可以通过提供名称、return 类型和参数的数量/类型来让它知道它存在。
//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);
当您使用指针访问结构成员时 -> 使用运算符而不是 .运算符。
尝试使用这个:
ant->x=0;
ant->y=0;
ant->b=2;