妖娆乌龙茶 发表于 2023-11-1 18:02:34

如何理解*(*p2+i)

#include<stdio.h>
int main()
{
int temp={1,2,3,4,5};
int (*p2)=&temp;
int i;
for(i=0;i<5;i++)
{
printf("%d\n",*(*p2+i));
}
return 0;
}
如何理解*(*p2+i)

isdkz 发表于 2023-11-1 18:02:44

在这段代码中, p2是一个指向包含5个整数的数组的指针。 p2的类型是int (*) ,意味着它指向一个包含5个整数的数组。

*p2表示解引用p2 ,得到指向数组的指针。因此, *p2的类型是int ,它指向一个包含5个整数的数组。

*(*p2+i)表示解引用*p2 ,然后在数组中移动i个位置,最后再次解引用。这个表达式的结果是*(*p2+i)所指向的整数。

因此,在循环中, *(*p2+i)表示访问数组temp中位置为i的整数。然后,使用printf函数打印这个整数的值。

通过这个循环,我们可以依次打印出数组temp中的所有整数。

xiaotubie 发表于 2023-11-6 14:57:40

本帖最后由 xiaotubie 于 2023-11-6 17:41 编辑

二楼又是一个错误的回答。
第一句说:p2是一个指向包含5个整数的数组的指针。 p2的类型是int (*) ,意味着它指向一个包含5个整数的数组。
第二句说:*p2表示解引用p2 ,得到指向数组的指针。因此, *p2的类型是int ,它指向一个包含5个整数的数组。
这两句是有多矛盾?p2和*p2都指向了包含5个数组的,都是指针? 敢请你的*运算没用处啊,哈哈,而且*p2这个指针的类型还是int ?
这种错误的回答,怎么能让问的人明白,如果我是问的人,肯定懵圈了!


p2是数组指针,所以*p2是数组,*p2+i 中数组*p2隐适转换为数组首元素指针,*p2+i 结果是指向数组第 i 个元素的指针(首元素是第0个),因此*(*p2+1) 结果就是数组第 i 个元素
页: [1]
查看完整版本: 如何理解*(*p2+i)