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

小弟最近在学指针,刚学到空类型指针发现只要申请1个字节的空间居然可以赋值20个字节的内容而且都没报错这是为什么呢?
void*p=malloc(1);//给空类型指针分配20个字节
int*px=(int*)p;//把空类型指针地址赋值给int指针
for(inti=0;i<5;i++){
px[i]=i+10;
}
for(inti=0;i<5;i++){
printf("\r\n%d",px[i]);
}
printf("%x",px);
千万里不及你
浏览 444回答 2
2回答

qq_遁去的一_1

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

GCT1015

这样做无疑不太合理,C语言设计的很自由,它认为编程员应该清楚自己在做什么。这跟C语言不检查数组越界一样,这种问题是设计理念的问题,自己注意不要这么做就是了。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript