C++ 将二维数组传递给函数时出错

C++ 将二维数组传递给函数时出错,c++,algorithm,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

这个程序只是为了把完整的二维数组传递给函数。我能想方设法地解决这个问题,但我不明白。我写了一个程序,我应该用苏打语写,我写这个程序是为了让它工作(在评论中) 谁能给我解释一下这个问题吗

#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<<"--";
    }

}
#包括
#包括
作废打印(bool*a);
使用名称空间std;
int main()
{
bool-arr[3][3]={1,1,1,0,0,1,1};
print(arr[0]);//**这是可行的,但为什么我们需要下标0,这里只有print(arr)应该有效**
getch();
返回0;
}
作废打印(bool*a)
{
对于(int i=0;i使用:

如果要调用
print(arr);

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

arr
bool
的数组
3
,当传递到
print
函数调用时,
arr
表达式将转换为指向
bool
的数组
3
的指针使用:

void print(bool *a)
如果要调用
print(arr);

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

arr
bool
的数组
3
,当传递到
print
函数调用时,
arr
表达式转换为指向
bool
的数组
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<<"--";
}
void打印(布尔a[][3],整数行大小)
{
对于(int i=0;i
应该是

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<<"--";
}
void打印(布尔a[][3],整数行大小)
{

对于(int i=0;我不能只解析基址(指针)为了传递整个二维数组???@AmanJagga,这样我们只传递基址,但是,由于它是一个二维数组,内部存储为1d,所以只指定基址是不够的,您必须指定第二维大小,以便编译器进行寻址,这就是为什么需要知道第二维大小的原因n你解释一下上面的程序(我发布的带有问题的程序)工作正常吗?此外,我不明白我们是如何以您的方式传递基址的?我们没有使用指针,那么基址是如何传递的???@AmanJagga很抱歉,我被其他东西分散了注意力。数组在内部衰减为指针,所以即使在语法方面,我们也没有使用指针,在内部,它仍然是指针。访问如果您知道二维尺寸是3,那么rray元素a[i][j]相当于*(a+i*3+j)。此链接可能有助于您理解主题:我们不能只解析基址(指针)吗为了传递整个二维数组???@AmanJagga,这样我们只传递基址,但是,由于它是一个二维数组,内部存储为1d,所以只指定基址是不够的,您必须指定第二维大小,以便编译器进行寻址,这就是为什么需要知道第二维大小的原因n你解释一下上面的程序(我发布的带有问题的程序)工作正常吗?此外,我不明白我们是如何以您的方式传递基址的?我们没有使用指针,那么基址是如何传递的???@AmanJagga很抱歉,我被其他东西分散了注意力。数组在内部衰减为指针,所以即使在语法方面,我们也没有使用指针,在内部,它仍然是指针。访问如果你知道二维尺寸是3,那么rray元素a[i][j]相当于*(a+i*3+j)。这个链接可能有助于你理解这个主题:但是为什么在一维数组中,当我们只在func中传递了基址时,我们可以使用[i]来访问数组呢?这个例子是#include#include void print(int*a);使用名称空间std;int main(){int arr[3]={1,2,3};print(arr);getch();return 0;}void print(int*a){for(int i=0;i那为什么在一维数组中,当我们只在func中传递了基地址时,我们可以使用[i]访问数组呢?例如#include#include void print(int*a);使用命名空间std;int main(){int arr[3]={1,2,3};print(arr);getch();返回0;}无效打印(int*a){for(int i=0;i