C和C结构的新手 - 如何将结构作为函数中的参数

时间:2010-09-09 02:49:11

标签: c function parameters struct

StackOverflow的新手,C的新手。我试图将一个struct作为函数'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);
}

5 个答案:

答案 0 :(得分:9)

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

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

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

add_fields(&data);

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

答案 1 :(得分:3)

以下是您更正后的代码:

#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(因此&)。通过传入指针,add_fields中的更改会反映在外部呼叫struct上。

  • main始终返回int

答案 2 :(得分:1)

有几个问题:

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

add_fields(&data);

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

其他两个小问题:main的返回类型应为int

int main() { ...

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

答案 3 :(得分:0)

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

add_fields,传入三个(安培;数据);

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

答案 4 :(得分:0)

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

add_fields(&data)

**哇我真的很慢这个:P