我一直试图将结构作为参数传递,但我似乎对不同的结构有问题。 我的目标是创建一个泛型函数,它接受一个结构,然后覆盖特定结构中的字段。
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);
}
有没有办法解决这个问题并创建这样的通用函数?
答案 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函数中。