如何用C中的结构调用函数?

时间:2017-02-07 11:08:59

标签: c function struct call

我正在努力制作一个“兰顿的蚂蚁计划”。 我已经定义了一个结构:

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'之前的预期表达式。

我看不出问题出在哪里。有人知道什么是错的。我对编码很新。

由于

4 个答案:

答案 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);
相关问题