将2-d数组传递给函数时出错

时间:2013-04-14 20:24:48

标签: c++ algorithm

该程序只是用于传递完整的二维数组来运行。我能够通过钩子或骗子来运行问题,但我没有理解。我写了一个程序,我应该用它写的,我写的让它工作(在评论中) 有人可以解释一下这个问题吗?

#include<iostream>
#include<conio.h>
void print(bool *a);
using namespace std;
int main()
{
    bool arr[3][3]={1,1,1,1,0,0,0,1,1};
    print(arr[0]);//**This IS working but why  we need subscript 0 here only print(arr) should work?..**
    getch();
    return 0;
}
void print(bool *a)
{

    for(int i=0;i<3;i++)
    {
        for(int j=0;j<3;j++)
            {
                cout<<*(a+i*3+j)<<"|";//**cant we use cout<<a[i][j] here??In 1 d array it is working fine**
            }
            cout<<"--";
    }

}

2 个答案:

答案 0 :(得分:3)

void print(bool *a)

应该是

void print(bool a[][3])

编译器需要知道第二维的大小,以便计算寻址的偏移量。

void print(bool a[][3], int rowSize)
{
   for(int i=0;i<rowSize;i++)
   {
     for(int j=0;j<3;j++)
     {
        cout<<a[i][j]<<"|";
     }
     cout<<"--";
}

在C ++中,您应该优先使用vector<vector <bool> >而不是2D动态数组arr

答案 1 :(得分:1)

使用:

 void print(bool a[][3])

如果您想拨打print(arr);

,这是正确的原型

然后,您可以使用a[i][j]访问print函数体中的数组元素。

arr3的数组bool的数组,当传递给print函数调用时,arr表达式将转换为指向数组的指针3的{​​{1}}。