A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

#include <stdio.h>
int main(){
    int a[]={1,2,3,4,5};
    int *p = (int *)(&a+1);
    printf("%d\n",*(p-1));
    return 0;

}

8 个回复

倒序浏览
int *p = (int *)(&a+1)   后面的&a+1就是数组越界
相当于a数组最后的元素5 越界了4个字节 这样理解比较清晰
回复 使用道具 举报
zzt244 发表于 2016-3-2 02:06
int *p = (int *)(&a+1)   后面的&a+1就是数组越界
相当于a数组最后的元素5 越界了4个字节 这样理解比较清 ...

不是元素5去越界的哦 画图比较容易看
回复 使用道具 举报
吴振伟 来自手机 中级黑马 2016-3-2 08:07:11
板凳
66666666666666
回复 使用道具 举报
路过看看
回复 使用道具 举报

#include <stdio.h>
    int main(){
        int a[]={1,2,3,4,5};
        int *p = (int *)(&a+1);//&a是这个数组的地址,加1就到数组外面去了,在第五个元素的后面,即数字5的后面4个字节低字节地址就是p的值,,
        printf("%d\n",*(p-1));//p-1就是数组第五个元素的地址,*一下,就是第五个元素的值!
        return 0;
        
    }
回复 使用道具 举报
看看                     
回复 使用道具 举报
wx_MkPtTU4D 发表于 2016-3-7 23:13
#include
    int main(){
        int a[]={1,2,3,4,5};

膜拜大神~~
回复 使用道具 举报
dx206 来自手机 中级黑马 2016-3-8 13:44:37
9#
楼上正解!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马