求解。
# include <stdio.h>
main()
{
int a=1,b=2,c=3;
int *p[3]={&a,&b,&c};
for (int i =0; i<3; i++)
{
printf("%x\n",*(p+i));
printf("%d\n",*p[i]);
printf("%x\n",p+i);
printf("*****分割线*****");
}
}
以下是结果。
指针数组里的元素是地址嘛,第三个打印出来的结果不应该是里面的元素的值,也就是地址嘛?为什么和第一个不一样?还是说元素是地址时比较特殊,只能用*取?谢
第三个是p[i]的地址,不是p[i]的值
*(p+i)与p[i]效果相同,都是取数组元素的值,因此*(p+i)就是a,b,c的地址;*p[i]就是取a,b,c的值
p+i是数组元素的地址,*(p+i)是去数组元素地址的值
*(p+i)相当于a,b,c的地址
p+i相当于数组p的每个元素的存储地址,这个地址里存储这a,b,c的地址
我说一下自己的理解哈,不一定对,欢迎大佬指点:第一个*(p+i)是输出指针数组里面存储的变量的地址,即a,b,c的地址,而第三个输出的是指针数组本身的地址,所以不一样
指针是对于地址的直接应用所指向的的是地址而不是数据
你的p这么定义相当于只一个二维指针,p+i是p的地址,*(p+i)相当于是a,b,c的地址,而**(p+i)才是1,2,3.