为了账号安全,请及时绑定邮箱和手机立即绑定

最近在学C的指针,为什么申请一个字节的空间缺可以放多个内容呢

最近在学C的指针,为什么申请一个字节的空间缺可以放多个内容呢

翻阅古今 2019-04-10 20:47:51
小弟最近在学指针,刚学到空类型指针发现只要申请1个字节的空间居然可以赋值20个字节的内容而且都没报错这是为什么呢?void*p=malloc(1);//给空类型指针分配20个字节int*px=(int*)p;//把空类型指针地址赋值给int指针for(inti=0;i
查看完整描述

1 回答

?
函数式编程

TA贡献1807条经验 获得超9个赞

编译器不检查越界。不允许数组下标越界,并不是因为界外没有存储空间,而是因为界外的内容是未知的。无论界外的空间是否有被利用,我们都可以访问那块内存。
于是,即使没有定义a[-1]或者a[i]//(i>a.lenghth(),也可以访问。
编译阶段从a取首地址,然后根据下标取偏移量,得到*(a+i)这块内存。
不检查越界问题的好处有:
1.检查的话编译器必须在生成的目标代码中加入额外的代码用于程序运行时检测下标是否越界,导致程序的运行速度下降
2.更加自由
                            
查看完整回答
反对 回复 2019-04-10
  • 1 回答
  • 0 关注
  • 353 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信