将二维数组索引传递给函数?

Posted

技术标签:

【中文标题】将二维数组索引传递给函数?【英文标题】: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 会影响阵列速度。 【参考方案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,添加了一些解释,希望对您有所帮助

以上是关于将二维数组索引传递给函数?的主要内容,如果未能解决你的问题,请参考以下文章

无法将二维字符数组传递给函数(C++)

将二维数组传递给 C++ 函数

VBA:将二维数组传递给集合函数[重复]

无法将二维数组传递给 C++ 中的辅助函数

将二维字符串数组传递给函数时出错 (C++)

使用 c++/vC++ 将结构数组和二维数组传递给函数