传递结构作为参数

时间:2015-10-19 18:32:12

标签: c struct

我一直试图将结构作为参数传递,但我似乎对不同的结构有问题。 我的目标是创建一个泛型函数,它接受一个结构,然后覆盖特定结构中的字段。

struct information{
        int number;
 };
typedef struct information Jack;
typedef struct information Joe;

然后是一个函数。

foo(struct information Name , int randomNumber) {
     Name.number = randomNumber;
}

然而,当我打印Jack.number和Joe.number时,它会打印0。

void main() {
    int h =5;
    foo(Joe,h);
    foo(Jack,h);
    printf("%d",Jack.number);
    printf("%d",Joe.number);
  }

有没有办法解决这个问题并创建这样的通用函数?

4 个答案:

答案 0 :(得分:2)

也许你应该传递指向你的结构的指针,如下所示:

foo(struct information *Name , int randomNumber) {
     Name->number = randomNumber;
}

您可以像这样调用您的函数:

foo (&Jack, 42);

[编辑]哦,你的声明也有问题。也许你可以像这样声明你的对象:

typedef struct informationStruct {
        int number;
} Information;

Information Jack;
Information Joe;

和你的功能如下:

foo(Information *Name , int randomNumber) {
     Name->number = randomNumber;
}

答案 1 :(得分:1)

C按值传递结构(与每个其他参数类型一样)。如果要查看函数之外的更改,请通过引用传递它:

void foo(struct information *name, int randomNumber) {
    name->number = randomNumber;
}

foo(&joe, 42);

答案 2 :(得分:1)

您按价值传递struct。您对Name中的foo所做的任何更改只会影响foo中对象的副本。它不会更改调用函数中对象的值。

如果希望更改在调用函数中生效,则需要将指针传递给它。为此,您需要更改foo

的界面
foo(struct information* Name , int randomNumber) {
     Name->number = randomNumber;
}

您还需要更改呼叫以匹配界面。

foo(&Joe,h);
foo(&Jack,h);

答案 3 :(得分:0)

请记住,C传递,值为函数而不是引用。因此,正如大家所提到的,您可以将结构的地址(您想要修改)传递给函数,然后对该函数内部结构所做的更改将自动反映在main函数中。