鱼C论坛

 找回密码
 立即注册
查看: 2168|回复: 5

[已解决]求助 数组指针(*(*p+i))中 *p的理解

[复制链接]
发表于 2021-3-13 15:00:08 From FishC Mobile | 显示全部楼层 |阅读模式

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

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

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)应该是数组元素的地址
i为步长 则*p2为数组首元素的地址
但p2本身就是数组的地址(也是首元素的地址)
如何理解*令我困扰
求各位指正!
最佳答案
2021-3-13 16:34:15
temp        首元素地址 +1跳过一个元素的地址
&temp[0]  首元素地址 +1跳过一个元素的地址
&temp      数组的地址 +跳过整个数组的地址
p2只是数组的地址,不可以叫首元素地址,虽然数组地址和首元素地址值一样,但是不能混为一谈

int(*p2)[5]=&temp;
对p2解引用后*p=temp 和上边第一个是一个效果
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-3-13 16:34:15 | 显示全部楼层    本楼为最佳答案   
temp        首元素地址 +1跳过一个元素的地址
&temp[0]  首元素地址 +1跳过一个元素的地址
&temp      数组的地址 +跳过整个数组的地址
p2只是数组的地址,不可以叫首元素地址,虽然数组地址和首元素地址值一样,但是不能混为一谈

int(*p2)[5]=&temp;
对p2解引用后*p=temp 和上边第一个是一个效果
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-3-13 17:03:08 From FishC Mobile | 显示全部楼层
洋洋痒 发表于 2021-3-13 16:34
temp        首元素地址 +1跳过一个元素的地址
&temp[0]  首元素地址 +1跳过一个元素的地址
&temp       ...

谢谢您!
是否可以这样理解:
int *p2;
p2=&temp;
然后等号两边都做*运算(*与&互为逆运算)
得到*p2=temp
*p2在printf语句中只是一种表达方式
等价表示还有:
&temp[0] 或 temp
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-13 17:11:31 | 显示全部楼层
int *p2;
p2=&temp;
可以这样理解,但是指针定义必须明确表示是指向什么的指针
你这样定义P2只能是指向整数的指针,当temp是一个整数的时候可以这么写
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-3-13 17:12:37 From FishC Mobile | 显示全部楼层
洋洋痒 发表于 2021-3-13 17:11
int *p2;
p2=&temp;
可以这样理解,但是指针定义必须明确表示是指向什么的指针

再次感谢您!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-13 17:13:01 | 显示全部楼层

不用客气
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-15 03:04

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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