求救
#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;
}
$ gcc test4.c && ./a.out
1
2
3
4
5
为什么 *(*p2 + i)要取两次值,里面的取值是干嘛的???????? 本帖最后由 sunrise085 于 2020-9-26 21:32 编辑
程序定义了一个int类型的数组指针(*p2),指针指向一个长度为5的数组,p2加一次跳过五个int类型数据的数组。将temp数组的地址赋值给了p2
*(*p2+3) p2是数组指针的首地址,*p2+3实际上是*(p2+0)+3,是指向temp的地址
你可能需要学习一下数组指针和指针数组的区别。
这个程序不太能讲明白。正常情况下,数组指针都是指向一个二维数组的。给你写了一个程序,可能有助于你理解。
#include <stdio.h>
int main()
{
int temp = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};
int (*p2)= &temp;
int i,j;
printf("%x\n",p2);
for (i = 0; i < 3; i++)
{
printf("temp[%d]的地址是%x\n",i,*(p2+i));
for(j=0;j<4;j++)
{
printf("%x的值:",*(p2+i)+j);
printf("%d\n", *(*(p2+i)+j));
}
}
return 0;
} sunrise085 发表于 2020-3-19 18:40
程序定义了一个int类型的数组指针(*p2),指针指向一个长度为5的数组,p2加一次跳过五个int类型数据的 ...
为什么p2是数组指针的首地址?所有指针(包括p2)不都因该是数组中某个元素的地址吗 zj132128 发表于 2020-3-20 19:18
为什么p2是数组指针的首地址?所有指针(包括p2)不都因该是数组中某个元素的地址吗
你认真看我写的回答了吗?你运行我给你写的这个程序了吗?
temp是一个数组,temp不是1,temp才是1
与此类似,(*p2)是个数组,p2不是元素的地址,*(p2+0)才是元素地址,*(*(p2+0)+0)才是元素的值
若是单个指针的话(假设定义了int *p=temp),那么p就是temp数组的首地址,*p就是temp的值。
若是你还是不太理解的话,可以这样写:p2,这样写和*(p2+0)是一样的。
把我在二楼写的程序改正这种形式,运行结果是一样的
#include <stdio.h>
int main()
{
int temp = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};
int (*p2)= &temp;
int i,j;
printf("%x\n",p2);
for (i = 0; i < 3; i++)
{
printf("temp[%d]的地址是%x\n",i,p2);
for(j=0;j<4;j++)
{
printf("%x的值:",p2+j);
printf("%d\n", *(p2+j));
}
}
return 0;
} sunrise085 发表于 2020-3-19 18:40
程序定义了一个int类型的数组指针(*p2),指针指向一个长度为5的数组,p2加一次跳过五个int类型数据的 ...
大兄弟第五行不需要&的。。。。。。
zj132128 发表于 2020-3-24 17:51
大兄弟第五行不需要&的。。。。。。
不同的编译器是有所差异。有的会报错,有的是可以通过的
最开始的时候,我没太关注这个写法。我也是从你帖子的程序中复制后修改的。你的这个帖子中不也是这样写的么? sunrise085 发表于 2020-3-20 20:23
你认真看我写的回答了吗?你运行我给你写的这个程序了吗?
temp是一个数组,temp不是1 ...
p2是整个数组的地址,但是在数值上等于数组的第一个元素的地址。
然后不知道这个*号,什么时候是表示指针变量的标识符,什么时候是取值啊。
之前有一个程序是这样的
char a = ‘f’;
char *pa = &a;这条语句和pa = &a有什么区别呢。
sunrise085 发表于 2020-3-20 20:23
你认真看我写的回答了吗?你运行我给你写的这个程序了吗?
temp是一个数组,temp不是1 ...
(*p2)不是一个数组吧,他是一个指针,指向一个数组 猪猪虾 发表于 2020-9-26 20:58
(*p2)不是一个数组吧,他是一个指针,指向一个数组
对对对。上面打错了 sunrise085 发表于 2020-9-26 21:07
对对对。上面打错了
可是我看你的分析,就是画了一张图的那个分析,可能是我理解不到位,指针数组是一个数组,存放了五个指针,数组指针是一个指针,存放了一个数组,我怎么感觉你是画出了五个指针,存放了五个数组?我现在是晕的,如果说得不对,请指教 猪猪虾 发表于 2020-9-26 21:13
可是我看你的分析,就是画了一张图的那个分析,可能是我理解不到位,指针数组是一个数组,存放了五个指针 ...
多谢提醒,这个图可能描述的不太准确。我修改一下,以免误导人。
页:
[1]