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)
这只会修改函数内部结构的本地副本。我该如何修改“真正的”全局结构?很抱歉,这可能很容易,但我无法在网上找到答案。
你基本上有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);
。
如果您确实按值传递(如在您的代码中),它只会传递参数的副本,并且该函数将使用该副本,而不是实际变量。
有关详细讨论,请查看以下内容。