数组名a是指向数组a[0]的指针,其类型为int *,因此a与&a[0]相当。
&a是指向所定义数组的指针,如题目中,&a的类型为int (*)[5]。因此int **p=&a初始化时会报出不兼容的错误。
可以用一下方式来进行初始化:
typedef int (*array)[5];
array p = &a;
数组名 a不 是数组首元素,是首元素的地址,a本身就是指针,内容和 &a[0] 是一样的。
可以测试一下
printf("%p", a);
printf("%p", &a[0]);
a 是数组的首地址 是常量 不是变量 所有出差了!
数组就是指针;
通过:CString tmp;
tmp.Format(_T("a = %d"), a);
tmp.Format(_T("a = %d"), &a);
测试,
a是数组首元素的地址,和&a是一样的!!!!!
这里需要使用一个强制转换:
int** p = (int**)a;