main()
{
int a[5] = {1,2,3,4,5};
int *ptr = (int*)(&a+1);
printf("%d %d" , *(a+1), *(ptr-1) );
} !输出什么,还有解释!帮我看看!
main() { int a[5] = {1,2,3,4,5}; int *ptr =
答案:3 悬赏:10
解决时间 2021-03-07 10:36
- 提问者网友:清羽墨安
- 2021-03-07 06:52
最佳答案
- 二级知识专家网友:冷眼_看世界
- 2021-03-07 07:09
我看了其它回答后为你做的补充。&a为取数组名的地址,即为整个数组的地址,它的类型为数组类型,(int*)(&a+1)将其强制转换成整型指针赋值给*ptr,并指向了数组界外,最后用*(ptr-1)又指向了界内的最后一个元素5。假如:
int a[8] = {1,2,3,4,5,6,7,8};
int *ptr = (int*)(&a+1);
printf("%d %d" , *(a+1), *(ptr-1) );
结果就是2 8
int a[8] = {1,2,3,4,5,6,7,8};
int *ptr = (int*)(&a+1);
printf("%d %d" , *(a+1), *(ptr-1) );
结果就是2 8
全部回答
- 1楼网友:随心随缘不随便
- 2021-03-07 07:50
输出2 5
此题考的是穿c语言中的指针
- 2楼网友:晚安听书人
- 2021-03-07 07:42
这题的关键在int *ptr=(int *)(&a+1);这一句上,&a表示取得数组a存储区域的首地址,再加1表示数组a存储区域的后的地址,这就使得ptr指针指向数组的最后一个元素后面的那个存储单元的地址,而ptr减1后,再进行数据访问,则访问的是ptr指针的前一个存储单元的值,所有最后的答案是2,5
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯