指向指针的指针(二级指针)和二维数组名到底有什么关系!
一般说来 int a[10][10],a的类型不是int **, 而是int(*)[10], a[0]的类型为int *,当取某一个变量的时候,采用int a[x][y] 的形式。
而对於int**p 二级指针来说,它与a的类型截然不同,数组名a中的地址值==二维数组中一维子数组的地址==a[0][0]的地址,也就是说int(a)==int(a[0])==int(&a[0][0]),而p是指针的指针,按理说不同类型的变量使用形式应该有些差别的,但是看下面的代码:
int**p;
int n,m;
cin>>n;
cin>>m;
p=new int*[n];
for(int i=0;i<n;i++)
{
p[i]=new int [m];
}
for(int j=0;j<n;j++)
for(int k=0;k<m;k++
{
p[j][k]=j+k;
}
for(int l=0;l<n;l++)
{
delete []p[i]
}
delete []p;
对p的访问方式和二维数组一摸一样,我就想知道,到底什么机制造成了这样的结果呢??明明p为int**类型,而a为int(*)[10],但是访问的时候p仍然被当做一个二维数组名字一样的量来访问内部元素,从指针的角度一一分析我知道原因,但是毕竟是两类不同性质的量,在共同的形式外表下,究竟它们的内部访问机制有什么不同呢???