该程序只是用于传递完整的二维数组来运行。我能够通过钩子或骗子来运行问题,但我没有理解。我写了一个程序,我应该用它写的,我写的让它工作(在评论中) 有人可以解释一下这个问题吗?
#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<<"--";
}
}
答案 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
函数体中的数组元素。
arr
是3
的数组bool
的数组,当传递给print
函数调用时,arr
表达式将转换为指向数组的指针3
的{{1}}。