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
展开
 我来答
White_MouseYBZ
2018-10-03 · TA获得超过4万个赞
知道大有可为答主
回答量:2.1万
采纳率:82%
帮助的人:6707万
展开全部

答案正确啊。*(a+1)就是a[1],*(ptr-1)就是ptr[-1](用负数表示下标是非法的,这里只表示从ptr所指的地方向左移一个元素的位置)。那么——

void main( void ) 

    int a[5]={1,2,3,4,5};//使a[0]==1,a[1]==2 ,a[2]==3 ,a[3]==4 ,a[4]==5 
    int *ptr=(int *)(&a+1);//声明指针ptr并用(int *)(&a+1)初始化到指向数组a的元素5的后面一个元素,由于&a是(*)[5]型,所以要用(int *)强制为int *以便与prt类型匹配
    printf("%d,%d",a[1],*(ptr-1)); //
    return; 
}

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式