C语言如何实现数组越界
这篇文章给大家分享的是有关C语言如何实现数组越界的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
数组越界
数组的下标是有范围限制的。
数组的下规定是从0开始的,如果数组有n个元素,最后一个元素的下标就是n-1。
所以数组的下标如果小于0,或者大于n-1,就是数组越界访问了,超出了数组合法空间的访问。
C语言本身是不做数组下标的越界检查,编译器也不一定报错,但是编译器不报错,并不意味着程序就是正确的,
二维数组的行和列也可能存在越界。
所以程序员写代码时,最好自己做越界的检查
#include <stdio.h>
int main()
{
int i = 0;
int arr[] = {1,2,3,4,5,6,7,8,9,10};
for(i=0; i<=12; i++)//在这里数组越界访问了,但这是主要问题吗?
{
arr[i] = 0;
printf("haha\n");
}
return 0;
}
让我们公布答案吧!
这段代码的bug是死循环
很抱歉满屏的haha吵到了你的眼睛(手动狗头)
是不是难以想象?请带着疑惑看看下文解释
有以下几个规则:
i和arr是局部变量
局部变量是放在栈区上的
栈区上内存的使用习惯是:先使用高地址处空间再使用地地址处空间
数组随着下标的增长,地址由低到高变化
示意图如下
“由低到高”和“由高到低”相遇了。
arr [12] = 0; 间接改变了i,相当于i = 0;
这样一来i又从0依次变大再回归0,实现了死循环的局面
至于空白格子代表的局部变量储存时相间隔的的字节个数是如何确定的,
这得看不同编译器了。vs编译器是空两格,其他编译器是什么样的,感兴趣可以自己探索哦。
感谢各位的阅读!关于“C语言如何实现数组越界”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341