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

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

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

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

2 回答

?
qq_遁去的一_1

TA贡献1725条经验 获得超7个赞

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

TA贡献1827条经验 获得超4个赞

这样做无疑不太合理,C语言设计的很自由,它认为编程员应该清楚自己在做什么。这跟C语言不检查数组越界一样,这种问题是设计理念的问题,自己注意不要这么做就是了。
                            
查看完整回答
反对 回复 2019-04-19
  • 2 回答
  • 0 关注
  • 443 浏览
慕课专栏
更多

添加回答

举报

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