代码案例
第二张图片是死循环
代码分析
在分析代码前需要将到几个知识点:
1 局部变量是储存在栈区当中的
2 栈区内存的使用习惯是先使用高地址在使用低地址
3 数组随着下标的增长地址是由低到高的
有了以上的知识点就可以支撑我们理解这个代码了
回到正文:
我们知道局部变量i 和 arr[] 是储存在栈区当中,因为i比arr先创建,所以i的地址高于arr。
然后arr数组的地址又是由低到高增长的,在代码中访问到arr[9]后开始越界访问,后面就是访问
arr[10]arr[11]arr[12],在访问到arr[12]的时候,发现arr[12]的地址和i(为什么i的地址就是在arr[12]这个位置不能在其他位置,这是vs自己设计的)一样,则arr[12]的值就和i一样了,所以i就变成了0,又开始for循环,以此往复.......
文字理解起来有点难懂,下面我画图在辅助理解
补充关于i的地址为什么是数组越界访问后第三个的地址?
这个是编译器自己设置的,在各个编译器上不同
在vc6.0上是越界后第一个地址
在gcc上是越界后第二个地址
在vs2013—2019上是越界后第三个地址