鱼C论坛

 找回密码
 立即注册
查看: 1318|回复: 2

[已解决]如何理解*(*p2+i)

[复制链接]
发表于 2023-11-1 18:02:34 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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)
最佳答案
2023-11-1 18:02:44
在这段代码中, p2  是一个指向包含5个整数的数组的指针。 p2  的类型是  int (*)[5] ,意味着它指向一个包含5个整数的数组。

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

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

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

通过这个循环,我们可以依次打印出数组  temp  中的所有整数。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-11-1 18:02:44 | 显示全部楼层    本楼为最佳答案   
在这段代码中, p2  是一个指向包含5个整数的数组的指针。 p2  的类型是  int (*)[5] ,意味着它指向一个包含5个整数的数组。

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

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

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

通过这个循环,我们可以依次打印出数组  temp  中的所有整数。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-11-6 14:57:40 | 显示全部楼层
本帖最后由 xiaotubie 于 2023-11-6 17:41 编辑

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


p2是数组指针,所以*p2是数组,*p2+i 中数组*p2隐适转换为数组首元素指针,*p2+i 结果是指向数组第 i 个元素的指针(首元素是第0个),因此*(*p2+1) 结果就是数组第 i 个元素
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-5 13:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表