定义int a[]={1,2,3,4,5};为什么int **p=&a;赋值出错?

2024-11-23 12:53:38
推荐回答(4个)
回答1:

数组名a是指向数组a[0]的指针,其类型为int *,因此a与&a[0]相当。
&a是指向所定义数组的指针,如题目中,&a的类型为int (*)[5]。因此int **p=&a初始化时会报出不兼容的错误。
可以用一下方式来进行初始化:
typedef int (*array)[5];
array p = &a;

回答2:

数组名 a不 是数组首元素,是首元素的地址,a本身就是指针,内容和 &a[0] 是一样的。

可以测试一下
printf("%p", a);
printf("%p", &a[0]);

回答3:

a 是数组的首地址 是常量 不是变量 所有出差了!

回答4:

数组就是指针;
通过:CString tmp;
tmp.Format(_T("a = %d"), a);
tmp.Format(_T("a = %d"), &a);
测试,
a是数组首元素的地址,和&a是一样的!!!!!

这里需要使用一个强制转换:
int** p = (int**)a;