【问题标题】:C++ - pass array by refC++ - 通过 ref 传递数组
【发布时间】:2012-03-18 11:08:02
【问题描述】:

如果我想通过 ref 传递一个数组怎么办?数组是指向其第一个元素的指针,我想通过 ref 传递“整个数组”。如果我定义

void someFunction(double& adouble){...}

那么 adouble 是对双精度的引用,而不是双精度数组。

如果我定义

void anotherFunction(double* adouble){...}

那么我的参数是一个指向双精度或数组的指针,但它不是通过 ref 传递的,对吧?

感谢和问候

【问题讨论】:

  • 数组不是指向其第一个元素的指针。数组就是数组。指针是指针。如果你想传递数组,你几乎肯定想使用std::vector
  • 一个注释是不够的:数组不是指针。在它给你带来更多麻烦之前,把这个错误的想法从你的脑海中清除掉。

标签: c++ arrays pointers pass-by-reference


【解决方案1】:

对于特定尺寸:

void foo(double (&array)[100]);

适用于任何尺寸:

template <size_t N>
void foo(double (&array)[N]);

【讨论】:

    【解决方案2】:

    为什么不:

    void foo(double *& bar)
    

    【讨论】:

    • 这通过引用传递一个指针,如果你想要一个数组,这几乎没用。
    【解决方案3】:

    另一种可能性是使用结构作为包装器来传递数组,这在某些情况下可以更方便。一个例子:

    const int N = 100;
    
    struct ArrayWrapper
    {
      double adouble[N];
    };
    
    void foo(ArrayWrapper& wrapper)
    {
      // ...
    }
    

    【讨论】:

      猜你喜欢
      • 2011-02-03
      • 1970-01-01
      • 2020-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-19
      相关资源
      最近更新 更多