假设我有这个全局结构
struct input_shift_register
{
bool not_used;
int data;
int *ptr_to_data;
};
我想在函数中传递它的一个实例来修改它的数据
void share_data(input_shift_register shift) {
shift.data = 5;
}
这只会修改函数内部结构的本地拷贝。我怎样才能修改“真正的”全局结构呢?很抱歉,这可能很容易,但我无法在网上找到答案。
最佳答案
你基本上有2个选择。
void share_data(input_shift_register& shift) {
shift.data = 5;
}
这将确保您的函数参数是绑定(bind)到函数参数的引用(别名),因此您正在处理在调用站点传递给函数的实际变量。
void share_data(input_shift_register* shift) {
shift->data = 5;
}
这将确保您传递变量的地址,因此在调用站点您应该将地址作为参数传递,即
share_data(&shift_register);
.如果您确实按值传递(如在您的代码中),它将仅传递参数的拷贝,并且该函数将使用该拷贝,而不是实际变量。
有关详细讨论,请查看以下内容。
What's the difference between passing by reference vs. passing by value?
关于c++ - 作为参数传递给函数(c++)时如何修改全局结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60220345/