之前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]就会出错了。
网友评论