约翰尼先森 发表于 2021-3-13 15:00:08

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

大家好 这个问题困扰我很久了
程序如下
#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)我难以理解
反推理解的话 (*p2+i)应该是数组元素的地址
i为步长 则*p2为数组首元素的地址
但p2本身就是数组的地址(也是首元素的地址)
如何理解*令我困扰
求各位指正!

洋洋痒 发表于 2021-3-13 16:34:15

temp      首元素地址 +1跳过一个元素的地址
&temp首元素地址 +1跳过一个元素的地址
&temp      数组的地址 +跳过整个数组的地址
p2只是数组的地址,不可以叫首元素地址,虽然数组地址和首元素地址值一样,但是不能混为一谈

int(*p2)=&temp;
对p2解引用后*p=temp 和上边第一个是一个效果

约翰尼先森 发表于 2021-3-13 17:03:08

洋洋痒 发表于 2021-3-13 16:34
temp      首元素地址 +1跳过一个元素的地址
&temp首元素地址 +1跳过一个元素的地址
&temp       ...

谢谢您!
是否可以这样理解:
int *p2;
p2=&temp;
然后等号两边都做*运算(*与&互为逆运算)
得到*p2=temp
*p2在printf语句中只是一种表达方式
等价表示还有:
&temp 或 temp

洋洋痒 发表于 2021-3-13 17:11:31

int *p2;
p2=&temp;
可以这样理解,但是指针定义必须明确表示是指向什么的指针
你这样定义P2只能是指向整数的指针,当temp是一个整数的时候可以这么写

约翰尼先森 发表于 2021-3-13 17:12:37

洋洋痒 发表于 2021-3-13 17:11
int *p2;
p2=&temp;
可以这样理解,但是指针定义必须明确表示是指向什么的指针


再次感谢您!!

洋洋痒 发表于 2021-3-13 17:13:01

约翰尼先森 发表于 2021-3-13 17:12
再次感谢您!!

不用客气
页: [1]
查看完整版本: 求助 数组指针(*(*p+i))中 *p的理解