【问题标题】:Pass empty array to function, populate array and obtain values [duplicate]将空数组传递给函数,填充数组并获取值[重复]
【发布时间】:2019-04-12 05:18:57
【问题描述】:

在我的 main 方法中,我想声明一个双精度数组(但不初始化它)并将其传递给一个函数。在该函数中,数组将使用一些值进行初始化。 现在回到我的 main 方法,我想读取并显示这些值。

populateValues (double*& values) {

    values [0] = 100;
    values [1] = 200;
    values [2] = 300;

}


int main() {

    double values[3];
    populateValues(values);

    for (int i=0; i <3; i++) {
        std::cout << values[i] << std::endl; 
    }

}

但是,当我编译上述内容时,我收到错误消息:

error: invalid initialization of non-const reference of type ‘double*&’ from an rvalue of type ‘double*’

毫无疑问,我传递参数的方式有问题,但我不知道如何解决。

【问题讨论】:

  • populateValues (double* values)
  • 尽量避免使用 C 风格的数组。 std::array&lt;double, 3&gt; 神奇地问题不再存在。
  • C++ 错误可能有点不透明(主要是因为很多东西都是有效的,语法错误可能类似于各种有效的东西。)您可以通过指针 (*) 传递参数,或引用 (&) - 但您不能同时使用两者,就像这样。您可以使用 STL 数组,如 @n.m。注释 - 在这种情况下,我建议通过引用传递(如果你都不使用,你会得到一个本地副本,并且值不会被传回。)

标签: c++ arrays pointers parameters


【解决方案1】:
#include <iostream>
void populateValues (double * values) {
    values [0] = 100;
    values [1] = 200;
    values [2] = 300;
}

int main() {
    double values[3];
    populateValues(values);
    for (int i=0; i <3; i++) {
        std::cout << values[i] << std::endl;
    }
}

【讨论】:

    【解决方案2】:

    对于double values[3];,值的类型为double[3],可能会衰减为double*

    期望double*&amp; 需要double* 类型的真正左值。并且临时不能绑定到 no-const 引用

    你可以换成

    • void populateValues(double (&amp;values)[3])
    • void populateValues(double* values)
    • void populateValues(double*const &amp;values)temporary 可以绑定到 const ref。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-10
      • 2014-12-05
      • 1970-01-01
      • 2018-04-04
      • 2011-06-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多