【问题标题】:How do I call a function with a struct in C? [closed]如何在 C 中调用带有结构的函数? [关闭]
【发布时间】:2017-06-24 14:31:17
【问题描述】:

我正在尝试制作“Langton 的蚂蚁程序”。 我已经定义了一个结构:

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

我看不出问题出在哪里。有人知道出了什么问题。我对编码很陌生。

谢谢

【问题讨论】:

  • 您至少应该发布r 定义?
  • 顺便说一句 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]);
  • 旁注:使用完全等效的char area[len][len] 进行参数声明可以更好地记录您的函数所期望的。这仅适用于人类,但那些必须使用源代码的人。
  • 错误在编译器指向的那一行。投票结束是一个简单的错字。

标签: c function struct call


【解决方案1】:

当您使用指针访问结构成员时 -> 使用运算符而不是 .运算符。

试试这个:

ant->x=0;
ant->y=0;
ant->b=2;

【讨论】:

    【解决方案2】:

    您的函数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]);
    

    【讨论】:

    • @Marievi 为什么要改函数原型?
    • @VladfromMoscow 我正在写两个替代方案,但都忘了提及,已编辑。
    • @Marievi 正如 StoryTeller 指出的那样,您可以建议使用替代原型进行自我记录。实际上不需要更改原型,因为函数声明是等价的。
    【解决方案3】:

    欢迎来到 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);
    

    【讨论】:

    • OP 必须获取数组的地址,以便将其传递给需要数组指针参数的函数。
    【解决方案4】:

    在 C 语言中,* 用于与保存地址的变量一起获取该地址的值,而 & 运算符用于获取变量的地址。
    函数定义 - st(Ant *ant,int len, char (* area)[len]) 表示第一个参数应该是指向结构 Ant 的指针。
    所以你需要改变你的函数调用 -

    st(Ant *ant,l,r) 
    

    到 -

    st(&ant,l,r).
    

    在函数调用中传递参数时也不需要指定类型。

    【讨论】:

      猜你喜欢
      • 2020-03-26
      • 2019-08-05
      • 1970-01-01
      • 2014-05-02
      • 2018-11-03
      • 2020-06-20
      • 2016-04-05
      • 2013-09-27
      • 1970-01-01
      相关资源
      最近更新 更多