|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#include<stdio.h>
int main()
{
int temp[5] = {1, 2, 3, 4, 5};
int (*p2)[5] = &temp;
int i;
for(i = 0; i < 5 ; i++)
{
printf("%d\n", *(*p2 + i));
}
return 0;
}
为什么打印那里是*(*p2 + i),而不是*(p2 + i),.
本帖最后由 一叶枫残 于 2021-2-14 18:08 编辑
一般这样想,数组指针,肯定是先指针再数组,它首先是一个指针,指向一个数组,而数组名代表的就是一个地址,所以要两层解引用
看下面程序,我用十进制输出地址比较好观察
- #include<stdio.h>
- int main()
- {
- int temp[5] = {1, 2, 3, 4, 5};
- int (*p2)[5] = &temp;
- int i;
- for(i = 0; i < 5 ; i++)
- {
- printf("p2+i储存的地址:%d\n",p2+i);
- printf("*p2+i储存的地址:%d\n\n",*p2+i);
- }
- return 0;
- }
复制代码- p2+i储存的地址:6487536
- *p2+i储存的地址:6487536 //相当于*(p2+0)+i 即 p2+i
- p2+i储存的地址:6487556
- *p2+i储存的地址:6487540 //相当于*(p2+1)+i
- p2+i储存的地址:6487576
- *p2+i储存的地址:6487544 //相当于*(p2+2)+i
- p2+i储存的地址:6487596
- *p2+i储存的地址:6487548 //相当于*(p2+3)+i
- p2+i储存的地址:6487616
- *p2+i储存的地址:6487552 //相当于*(p2+4)+i
复制代码
对于p2+i,因为定义的是一个指向5个元素的数组,而整型字节大小为4,所以,5个元素就是4*5=20,于是p2+i相当于(p2储存的值)+20*i;
对于*p2+i,相当于*(p2+0)+i,因为进行一次解引用,进入了数组名储存的地址值,而对于整型数组,每个字节大小为4,于是*p2+i相当于(最开始那层数组的首地址)+4*i,同理,第二层则是*(p2+1)+i,第三层是...。
|
|