#include<stdio.h>
int main()
{
int *a[2];
int c=10,d=20;
a[0]=&c;
a[1]=&d;
int**x=*(int***)&a;//&a三级地址
printf("%p\n",x);//二级地址
printf("%p\n",a);
printf("%p\n",&a[0]);//相当于二级地址与a地址相同,与x不相同
printf("%p\n",a[0]);//与x相同,为什么呢?a[0]不是一个变量的地址吗?
printf("---------------------\n");
int a0 =10;
int* a1=&a0;
int**aa =&a1;
int***aaa=&aa;
int** xx = *aaa;//类似于int**x=*(int***)&a;
printf("%p\n",xx);//二级地址
printf("%p\n",&a1);//二级地址相同
}
int**x=*(int***)&a;//本来&a就是三级地址,这里强转是因为&a是对指针数组名取地址,编译器不认识?
所以要强转为三星?
int a[],你对a取地址是不合法的,但是为了方便,编译器会假设是合法的
其值等于a.就是说a==&a// a与&a地址不相同呀,你的意思是即使不相同,因为是数组也算相同吗?
又前面还有一个“*”//"*"这是是什么意思?
&a[0]==(int***)&a//为啥相等呀?&a[0]与a的地址相同呀
"*"指针运算符;好好看书^_^
因为a是地址常量,&a==a;所以&a[0] == &a==a;
另外你这样写是不规范的。