将二维数组索引传递给函数?
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
函数中调用该指针吗?一个解释会很棒!
非常感谢。此外,值mpg
、speed
取自我的代码的另一部分,它工作正常。关于如何解决我现在遇到的问题的说明,会很棒!
【问题讨论】:
不相关但严重的错误:数组从零开始。 如何定义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,添加了一些解释,希望对您有所帮助以上是关于将二维数组索引传递给函数?的主要内容,如果未能解决你的问题,请参考以下文章