我应该放&传递结构时?

时间:2011-07-16 13:33:27

标签: c++ struct

下面的代码是传递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吗?

3 个答案:

答案 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)

并且在测试中,您会将代码更改为使用.而不是->