下面的代码是传递struct变量:
struct someStruct {
unsigned int total;
};
int test(struct someStruct* state) {
state->total = 4;
}
int main () {
struct someStruct s;
s.total = 5;
test(&s);
printf("\ns.total = %d\n", s.total);
}
(来自Pass struct by reference in C的来源 )
使用C ++进行编程时,我可以在没有&
的情况下传递此结构吗?我的意思是
test(s); // or should test(&s);
如果我这样做会复制s
吗?
答案 0 :(得分:3)
在C ++中,您可以使该函数将参考作为参数:
int test(someStruct& state) {
state.total = 4;
}
你可以这样调用这个函数:
someStruct s;
test(s);
不会复制。在函数内部,state
的行为与s
的行为相同。请注意,仅在使用C ++声明结构时才需要struct
关键字。此外,在C ++中,您的打印代码应如下所示:
std::cout << "s.total = " << s.total << std::endl;
您必须包含iostream
才能发挥作用。
答案 1 :(得分:0)
当您想要更改要传递给函数的结构的内容时,应该传递指针或按引用传递,否则该函数将修改正在创建的本地副本。
您可以传递指针:
int test(struct someStruct* state);
或通过引用传递
int test(struct someStruct &state);
在这两种情况下都不会创建副本。原始结构将被修改 重要的是要注意通过引用传递是一种更C ++的方式。
答案 2 :(得分:0)
test(&s);
pasess指向s。您可以在当前已定义的接受指针的函数中使用它:
int test(struct someStruct* state)
如果您想通过引用传递,则可以将函数定义更改为
int test(struct someStruct& state)
然后简单地致电:
test(s)
并且在测试中,您会将代码更改为使用.
而不是->