【问题标题】:New to C and C Structures -- How to take a struct as a parameter in a functionC 和 C 结构的新手——如何将结构作为函数中的参数
【发布时间】:2010-09-09 02:49:10
【问题描述】:

StackOverflow 的新手和 C 的新手。我正在尝试将结构作为函数“add_fields”中的参数,该函数添加前两个 int 字段“a”和“b”并将结果放入 int 字段'C'。没有从编译器得到任何东西,所以很明显我做错了什么。我只是不知道是什么。任何帮助,将不胜感激。

    #include <stdio.h>

    struct add{
    int a;
    int b;
    int c;
    }

    void add_fields(struct add *d){
    d->c = a + b;

    }

    main(){

    struct add data;
    data.a = 1;
    data.b = 2;
    data.c = 0;
    add_fields(data);
    printf("%d + %d = %d", data.a, data.b, data.c);
}

【问题讨论】:

  • “没有从编译器得到任何东西,所以很明显我做错了什么。”这是什么意思?编译器不会发出错误吗?您的编译器的错误和警告消息是否完全启用?
  • 关于编译器警告,如果您使用的是 gcc,请尝试 -Wall 选项。我假设这也应该是 ANSI C,在这种情况下,您应该使用 -ansi 并将 main() 设为 int 类型。
  • 当我说我没有从编译器得到任何东西时,我的意思是我有错误。抱歉不清楚。
  • 当您的问题涉及错误信息时,您也应该发布错误信息。

标签: c function parameters struct


【解决方案1】:

您非常接近,但变量ab 在该上下文中不存在,而是您需要通过指向结构d 的指针访问字段:

d->c = d->a + d->b;

其次,你需要在调用add_fields时传递对结构的引用(因为add_fields需要一个指针):

add_fields(&data);

&amp; 表示您将传递变量 data 的地址而不是值。

【讨论】:

  • 另外,对data 的引用需要传递给add_fields,而不是data 本身。 struct 块需要以分号结尾。
  • 我很惊喜地得到了有用的答案。非常感谢你。我现在明白了。
【解决方案2】:

这是您更正后的代码:

#include <stdio.h>

struct add{
    int a;
    int b;
    int c;
};

void add_fields(struct add *d){
    d->c = d->a + d->b;
}

int main(){

    struct add data;
    data.a = 1;
    data.b = 2;
    data.c = 0;
    add_fields(&data);
    printf("%d + %d = %d", data.a, data.b, data.c);

    return 0;
}
  • 您忘记了struct 定义后的分号。

  • 我必须修复你的 add_fields 函数。您没有将struct 用于ab

  • 您需要在函数调用中将指针传递给add_fields(因此是&amp;)。通过传入指针,您在add_fields 中的更改会反映在外部调用struct 上。

  • main 始终返回 int

【讨论】:

  • 你非常有帮助。谢谢。
【解决方案3】:

有几个问题:

main 中,data 的类型为struct add。当您调用add_field 时,您需要传递一个struct add*(即指向struct add 的指针)。要在main 中获取指向data 的指针,您需要使用&amp; 运算符:

add_fields(&data);

add_fields中,需要使用“成员访问语法”(-&gt;)来访问ab

另外两个小问题:main 的返回类型应该是 int

int main() { ...

并且您需要在结构定义的结束 } 之后放置一个分号。

【讨论】:

    【解决方案4】:

    C 是按值调用的语言。传递数据时,传递的是 struct add 类型对象的副本。在您的 add_fields 字段中,您正在接受指向该结构的指针。由于您想更改结构的字段,您应该传递数据结构的地址(并在 add_fields 中接受指向它的指针)。为此,

    add_fields(&data);

    此外,在 add_fields 中,您没有未定义的变量(a 和 b)。我认为它们也应该来自结构?

    【讨论】:

      【解决方案5】:

      您应该将结构的内存地址传递给 add_fields 函数。

      add_fields(&data)
      

      **哇,我在这方面真的很慢:P

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多