如何在作为参数传递给函数(c++)时修改全局结构?

JCS*_*CSB 1 c++ parameters struct scope

假设我有这个全局结构

struct input_shift_register
{
    bool not_used;
    int data;
    int *ptr_to_data;
};
Run Code Online (Sandbox Code Playgroud)

我想在函数中传递它的一个实例来修改它的数据

void share_data(input_shift_register shift) {
shift.data = 5;
}
Run Code Online (Sandbox Code Playgroud)

这只会修改函数内部结构的本地副本。我该如何修改“真正的”全局结构?很抱歉,这可能很容易,但我无法在网上找到答案。

aep*_*aep 5

你基本上有2个选择。

  • 通过引用传递
void share_data(input_shift_register& shift) {
  shift.data = 5;
}
Run Code Online (Sandbox Code Playgroud)

这将确保您的函数参数是绑定到函数参数的引用(别名),因此您正在处理在调用站点传递给函数的实际变量。

  • 通过指针
void share_data(input_shift_register* shift) {
  shift->data = 5;
}
Run Code Online (Sandbox Code Playgroud)

这将确保您正在传递变量的地址,因此在调用站点,您应该将地址作为参数传递,即share_data(&shift_register);

如果您确实按值传递(如在您的代码中),它只会传递参数的副本,并且该函数将使用该副本,而不是实际变量。

有关详细讨论,请查看以下内容。

按引用传递与按值传递有什么区别?