【问题标题】:Pass a 2D Array Index into a Function?将二维数组索引传递给函数?
【发布时间】:2013-02-28 06:18:39
【问题描述】:

我有一个填充二维数组的循环,我想将这个填充创建的值传递到一个函数中以使用它进行其他计算。我是 C++ 的初学者,所以清晰的解释会很有帮助。这是我的代码:

for (int car = 1; car <= 27; car++) {

    int test[27][3] = {{car, mpg[car], speed[car]}};

    float speed = speed[car];

    timeGen(speed);

    cout << car << "\t" << mpg[car] << "\t" << speed[car] << endl;
}

这是timeGen 函数:

float timeGen(float x)
{
int distance = 50;
float speed = x;
float time = distance/x;
return time;
}

似乎一切都会正常工作,但发生的情况是我收到一条错误消息,提示“下标需要数组或指针类型”。我对他们的意思有点困惑。它是在告诉我创建一个指向该索引的指针,然后在timeGen 函数中调用该指针吗?一个解释会很棒!

非常感谢。此外,值mpgspeed 取自我的代码的另一部分,它工作正常。关于如何解决我现在遇到的问题的说明,会很棒!

【问题讨论】:

  • 不相关但严重的错误:数组从零开始。
  • 如何定义speed[car]中的speed
  • 您应该为 float speed 和速度数组使用不同的名称。事实上,float speed 会影响阵列速度。

标签: c++ arrays pointers multidimensional-array


【解决方案1】:

您需要定义 float car_speed 而不是 float speed。它将解决您的错误。

【讨论】:

    【解决方案2】:

    即使在定义 float speed 之前有一个名为 speed 的数组,它也会在此定义之后立即超出范围。试试这个:

    float Cur_speed = speed[car];
    timeGen(Cur_speed);
    

    timeGen(speed[car]); // without the float speed
    

    另一件事是,在每次迭代中,您都会创建一个 test 的新实例。看起来您真正想要的是拥有一个 test 数组:

    int test[27][3];
    for (int car = 0; car < 27; car++) {
     test[car][0] = car;
     test[car][1] = mpg[car];
     test[car][2] = speed[car];
    

    确保 mpg 是一个包含 27 个元素的数组,并且始终使用从 0 到 26 的索引。speed 数组也是如此。当我们说test[car][0]时,我们指的是test[car]的第一个元素,由于您的定义,它总共有3个元素。本质上,test[car][X] = Y; 行与test[27][3] = {{car, mpg[car], speed[car]}} 执行相同的操作,但是该语法仅在您首次声明数组时才有效。并且您编写它的方式使用相同的数据初始化所有 27 个元素。

    【讨论】:

    • 非常感谢您的回答!不过,我有一个简单的问题,在第二部分你说我正在生成另一个“测试”实例,我将如何继续 for 循环?我花了一个整体来弄清楚如何做我现在所拥有的,所以我对这个修改后的版本有点困惑。我确实明白它在做什么,但我不确定在你已经完成之后如何继续它。
    • 效果很好,谢谢!快速解释一下:“ test[car][0] = car;”手段会很棒。此外,当我构建这个时,我得到了这个堆栈错误:“运行时检查失败 #2 - 变量'test'周围的堆栈已损坏。”这种情况以前发生在我身上,我了解到这意味着我对允许的内容进行了太多的初始化。
    • 修复了运行时检查的问题,但我仍然希望能解释一下“test[car][0]=car;”工作。
    • @Carpetfizz,添加了一些解释,希望对您有所帮助
    猜你喜欢
    • 2020-11-01
    相关资源
    最近更新 更多