#include <stdio.h>
void main ()
{
int a[5]={1,2,3,4,5};
int *ptr=(int *)(&a+1);
printf ("%d,%d\n\n",*(a+1),*(ptr-1));
}
各位大虾能帮小弟详细解释一下解题过程呢?小弟在此谢过了!
#include <stdio.h> void main () { int a[5]={1,2,3,4,5}; int *ptr=(int *)(&
答案:4 悬赏:10 手机版
解决时间 2021-02-09 13:15
- 提问者网友:星軌
- 2021-02-08 17:27
最佳答案
- 五星知识达人网友:西风乍起
- 2021-02-08 18:26
这题的关键在int *ptr=(int *)(&a+1);这一句上,&a表示取得数组a存储区域的首地址,再加1表示数组a存储区域的后的地址,这就使得ptr指针指向数组的最后一个元素后面的那个存储单元的地址,而ptr减1后,再进行数据访问,则访问的是ptr指针的前一个存储单元的值,所有最后的答案是2,5
全部回答
- 1楼网友:忘川信使
- 2021-02-08 22:03
&a是a[0]的地址,所以&a+1是a[1]的地址
ptr是指针,其初值为a[1],
*(a+1)的值为a[1],
故*(ptr-1)为a[0]
- 2楼网友:佘樂
- 2021-02-08 20:43
输出2,1
*(a+1)是指取数组a首地址加一的地址上的内容;
*ptr指向&a+1,所以值为2;
*(ptr-1)是指向数组a的首地址
楼上说的对,惭愧
- 3楼网友:骨子里都是戏
- 2021-02-08 19:54
地址 0-3 4-7 8-11 12-15 16-19 20-23
数值 1 2 3 4 5
&a+1 就是地址为20的地方
*ptr1[-1]就是20-4=16这个地方 一个int 占用4个地址
(int)a+1 跟a+1不一样 前者地址为1 后者为4
所以*ptr2表示的是指向地址为1的指针地址
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯