一道关于C语言的笔试题
#include<stdio.h>voidmain(void){inta[5]={1,2,3,4,5};int*ptr=(int*)(&a+1);printf("%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));
return;
}
输出结果为:2,5
其中的5是怎么得出来的? 展开
void main( void )
{ int a[5]={1,2,3,4,5};
int *ptr=(int *)(&a+1);
printf("%d,%d",*(a+1),*(ptr-1));
return;
}
输出结果为:2,5
其中的5是怎么得出来的? 展开
3个回答
展开全部
a[5]={1,2,3,4,5};在内存中占相邻的五个空间,(int *)(&a+1)指的是数组a后面的第一个内存空间,又赋值给了ptr,所以,ptr往前移动一个位置,刚好指到a的最后一个元素
追问
谢谢!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
int *ptr=(int*)(&a+1); // 这里ptr指向数组a的尾部,相当于 int *ptr = (int*)(&(a[5]));
&a如果看作是指针的话,那么它所管理的大小是sizeof(int)*5,
*(ptr-1) 这时可以看作 a[5-1] => a[4] => 5
&a如果看作是指针的话,那么它所管理的大小是sizeof(int)*5,
*(ptr-1) 这时可以看作 a[5-1] => a[4] => 5
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
&a+1的值为元素a[4]后面的那个存储单元,ptr-1指向a[4],因此输出5。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询