void main(void) { int a[5]={1,2,3,4,5}; int *ptr=(int *)(&a+1); printf("%d%d",*(a+1),*(ptr-1)); }
#include<stdio.h>voidmain(void){inta[5]={1,2,3,4,5};int*ptr=(int*)(&a+1);printf("%d%d...
#include<stdio.h>
void main(void)
{
int a[5]={1,2,3,4,5};
int *ptr=(int *)(&a+1);
printf("%d%d",*(a+1),*(ptr-1));
}
输出为2,5 怎么得到的 展开
void main(void)
{
int a[5]={1,2,3,4,5};
int *ptr=(int *)(&a+1);
printf("%d%d",*(a+1),*(ptr-1));
}
输出为2,5 怎么得到的 展开
展开全部
&a 可以看成 你 声明了:
int a[2][5]={1,2,3,4,5};
&a 是 地址 &a[0][0]
&a + 1 是 地址 &a[1][0];
所以 , ptr 的 初始化 指向 了 a 的 首地址 加 偏移 sizeof(int) * 5
----
int a[5]={1,2,3,4,5};
printf("%d%d",*(a+1),*(ptr-1));
语句中 *(a+1) 就是 a[1], 输出 2
*(prt-1) 就是 a[4], 输出 5,
int a[2][5]={1,2,3,4,5};
&a 是 地址 &a[0][0]
&a + 1 是 地址 &a[1][0];
所以 , ptr 的 初始化 指向 了 a 的 首地址 加 偏移 sizeof(int) * 5
----
int a[5]={1,2,3,4,5};
printf("%d%d",*(a+1),*(ptr-1));
语句中 *(a+1) 就是 a[1], 输出 2
*(prt-1) 就是 a[4], 输出 5,
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这题的关键在int *ptr=(int *)(&a+1);这一句上,&a表示取得数组a存储区域的首地址,再加1表示数组a存储区域的后的地址,这就使得ptr指针指向数组的最后一个元素后面的那个存储单元的地址,而ptr减1后,再进行数据访问,则访问的是ptr指针的前一个存储单元的值,所有最后的答案是2,5
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询