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

标签 c++ struct parameters scope

假设我有这个全局结构

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/

    相关文章:

    c - 带有 typedef 的结构

    c - 为 2 个指针分配相同的值,而不是使它们的引用相等(C 中的指针)

    json - Dropwizard/泽西 : Authentication and JSON parameter

    javascript - 将参数传递给参数

    c++ - 二叉搜索树中的最低公共(public)祖先

    C++ 采用华氏温度数组,将它们转换为摄氏温度,然后将摄氏温度添加到新数组中

    c - 如何检查结构体中的变量是否未在 C 中使用?

    c++ - 标准 C++ 事务内存状态

    c++ - 我想在 QT 中使用 LEMUR 库

    带参数的 Java Webstart