【问题标题】:Passing Structure to function as argument in C将结构传递给函数作为 C 中的参数
【发布时间】:2010-11-04 11:14:40
【问题描述】:

我遇到了这个问题,不知道原因

我有这个结构

typedef struct 
{

    Int32   frameID;
    Int32   slotIndx;
    Int32   symNumber;

}   recControlList;


    recControlList  *recControlListPtr;

数据类型是 typedef。

调用函数是:

Fun( recControlListPtr);

有趣的声明是

Fun (recControlList *recControlListPtr);


syntax error : missing ')' before '*'

如何将结构作为指针传递给函数?请帮忙

【问题讨论】:

    标签: c pointers struct parameter-passing


    【解决方案1】:

    在Fun()的声明之前需要有struct声明和typedef。

    如果所有这些都在同一个文件中,那么它们只是顺序错误。如果结构体在不同的文件中声明,则需要在函数原型之前#include 。

    编辑:所以关于你的第二个问题......

    【讨论】:

    • 这似乎是问题所在。我还尝试在函数 dec 中使用强制 struc,因为没有标签(有人评论过 bfor)。他们都工作。我现在已经在一些 h 文件中定义了结构,该结构包含在函数调用之前。现在我得到不同的错误:错误:“recControlList *”类型的参数与“recControlList..pls help类型的参数不兼容
    • 更正[错误:“recControlList *”类型的参数与“recControlList”类型的参数不兼容]
    • 感谢 firoze!但我不明白这个概念,实际上我需要声明结构指针并需要传递给函数。我应该将它作为 ** 而不是 * 收集吗?
    • 实际上,我之前误读了您的代码,并认为我看到了一些我没有看到的东西。对于那个很抱歉。所以,是的,如果您希望参数是指向 recControlList 的指针,那么参数是 recControlList*。 (一星)
    【解决方案2】:

    声明缺少返回类型,例如:

    void Fun (recControlList *recControlListPtr);
    

    (编辑:正如其他人所指出的,函数声明中的返回类型在 C 的某些变体中是可选的,但它的风格很好,并且由于消除歧义,它可以为您提供更好的错误消息)。

    【讨论】:

    • 返回类型在 C 中是可选的。您应该得到编译器警告,但不是错误。
    • Alexandre,C99 允许函数声明没有返回类型。然后类型默认为“int”。
    • @davmac C99 删除了隐式 int 返回类型。 C99 模式下的编译器应该产生错误或警告。在 C89 中很好
    • @Alexandre 你是对的,(但是你最初声称“你会得到一个错误”是误导性的)。
    【解决方案3】:

    你随便传,比如在

    char* xy = "HelloWorld";
    if(!strcmp(xy, "HelloWorld"))
    

    你也可以做一个

    struct xy ;
    functionName(&xy);
    

    您是否为函数指定了返回值?

    【讨论】:

      【解决方案4】:

      您可以参考http://fresh2refresh.com/c/c-passing-struct-to-function/ 网站。给出了非常简单的示例程序,用于通过地址传递结构来发挥作用。 我希望这对你有用。

      【讨论】:

      • 这是一个相当古老的问题,已经得到解答。提供链接而不在您的答案中提及相关部分不是一个很好的做法,因为该链接可能在将来的某个时候变得无效。一些意见见this thread
      猜你喜欢
      • 2018-09-17
      • 1970-01-01
      • 2021-10-10
      • 2018-05-29
      • 1970-01-01
      • 1970-01-01
      • 2020-05-04
      • 1970-01-01
      相关资源
      最近更新 更多