如何在 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;