自身对C语言数组越界访问的简易理解
来源:互联网 发布:.手机域名注册局 编辑:程序博客网 时间:2024/05/29 02:11
先看一个程序
#include <stdio.h>
int main()
{
int arr [ 10 ] = { 0 } ;
int i = 0 ;
for ( i = 0 ; i < 13 ; i ++ )
{
arr [ i ] = 0 ;
printf ( " hehe\n" ) ;
}
return 0 ;
}
大家猜猜这个程序如果编译链接会出现什么结果?
如上图,便是此代码的运行结果,发现是个死循环。这是为什么呢?
这个究竟是什么原因造成的呢?我对程序逐步运行进行监视,并进行查找 i 的值的变化情况发现,当 i < 13 时,如下;
当 i = 9时按道理来说数组内元素已经访问完全了,应该不会进行下去,但是却并不是这样的,
此时的 i 已经到达了10,甚至是12,也就是说这个时候arr[10]以及arr[12]还是有某些非数组元素的东西的,接着继续运行,令人惊讶的一幕出现了。
在 i ++进行到 12 时,经过 arr[12]=0;这一个条件发现,i 的值变成了零?也就是说 i 的值在这一步程序内的值被改变,从新赋予 0 的值,这便是出现死循环的原因吧。
经过查阅资料等等,我发现。其实一个数组并非只由其自己数组元素组成,这其中还包括这很多东西,比如说是数组名称 i 的存在,如果每个角标代表其元素的话,可以近似的称作arr[12]便是 i ,12便是 i 的角标。所以当访问到arr [12]时,给它赋值为 0 进而改变了 i 的值,所以出现了之前的死循环。这样说大概可以解释的清。
这个问题出现的原因就是因为越界访问!
阅读全文
0 0
- 自身对C语言数组越界访问的简易理解
- C语言之对多维数组的简易理解
- C语言的越界访问
- C语言中数组越界的例子
- C语言中数组越界访问造成死循环现象
- 对C语言数组的理解
- 对C语言二维数组的理解
- C语言中的数组越界
- C语言中的数组越界
- C语言中的数组越界
- c语言零长数组及对数组名的理解
- c语言中越界访问是不会报错的
- 关于C语言的函数调用过程和数组越界
- C语言中不检查数组越界的应用
- 关于C语言,字符数组中越界的两个问题
- C语言的编译器为什么不检查数组下标越界
- 关于C语言数组越界的演示程序
- C语言中数组越界导致死循环的测试
- Codeforce 894A QAQ(计数)
- 拓扑排序专题
- 设计模式—责任链模式
- hdu 1166(线段树模板)
- iOS 链式编程(Masonry)
- 自身对C语言数组越界访问的简易理解
- LVS原理
- 欢迎使用CSDN-markdown编辑器
- c#线程池实例
- 拨开字符编码的迷雾--字符编码概述
- hadoop 命令管理学习
- ubuntu14.04上安装Mist
- 51nod算法马拉松31总结
- C