将2D数组索引传递给函数?

时间:2013-02-28 06:18:39

标签: c++ arrays pointers multidimensional-array

我有一个填充2D数组的循环,我希望将此填充所创建的值传递给函数,以便对其进行其他计算。我是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取自我的代码的另一部分,工作正常。关于如何解决我现在遇到的问题的说明会很棒!

2 个答案:

答案 0 :(得分:0)

即使在定义speed之前有一个名为float 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个元素。

答案 1 :(得分:0)

您需要定义 float car_speed 而不是 浮动速度 。它将解决您的错误。