关于C++中静态的二维数组和动态申请二维数组的访问的区别

之前c++类的题目中有一道关于二维数组的题目,类的内部有一个二维指针,唉,算了,没有校园网题目不能截图还是算了吧,总之

通过

int **p=new int*[m];

for(int i=0;i<m;i++) 

    p[i]=new int[n];

得到的p[m][n]与直接int p[m][n]的访问方式是不同的 。

动态申请,访问p[a][b],过程是先到int* p[a],在访问(p[a])[b],

但是直接申请的访问方式int p[m][n]是 p[a*n+b](应该没写错吧)

那一道类的题目中,类内部有二维指针的,通过传入二维数组的指针的构造函数,是通过

int **p=new int*[m];

for(int i=0;i<m;i++)

    p[i]=new int[n];

for(int i=0;i<m;i++)

    for(int j=0;j<n;j++)

        p[i][j]=src[i][j];

赋值的

因此如果传入的二维指针是(int**)强制转换int p[m][n]得到的,则会出错.

因为src[i][j]在这里的意义变成先得到int*指针src[i],但是二维数组的src[i]其实并不是一个指针而是等同于src[i][0]即src[i*n+0],所以继续访问src[i][j]就会出错了。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容