小弟最近在学指针,刚学到空类型指针发现只要申请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.更加自由
添加回答
举报
0/150
提交
取消