首页 > 解决方案 > 为什么我不能将二维数组作为指针传递,但可以将一维数组作为指针传递

问题描述

显然这段代码有效

void printD(int * ar,int r)
    {
        for(int i = 0; i < r; i++)
            cout<<ar[i]<<endl;
    }
int main()
{
    int ar[3] = {1,2,3};
    printD(ar,3);
    return 0;
}

但是这段代码不起作用

void print2D(int ** ar,int r,int c)
    {
        for( int i = 0; i< r;i++)
            for(int j = 0; j < c;j++)
            cout<<ar[i][j]<<endl;
    }
int main()
{

   int ar2[1][2] = {{3,1}};
   print2D(ar2,1,2);
    return 0;
}

我不明白为什么这不起作用?

标签: c++arrayspointersmultidimensional-array

解决方案


这个数组int ar2[1][2]实际上衰减到int(*)[2]

没有指向被分配指针的中间指针,有一个连续的 1D 数组可以在 2D 中访问,因此剩余的 [2] 提供了从一行到另一行的跨度。


推荐阅读