有这样一段代码,分析在VS编译器的运行结果
#include<stdio.h> int main() { int i = 0; int arr[10] = { 1,2,3,4,5,6,7,8,9,10 }; for (i = 0; i <= 12; i++) { arr[i] = 0; printf("hehe\n"); } return 0; }
不少伙伴都认为执行这段代码会打印13次“hehe”然后程序就崩溃(数组越界访问)了,带实际运行结果是什么呢?
我们发现程序并没有出现崩溃的现象,而是在持续不断的打印出“hehe”,这是为什么呢?
让我们来调试一把代码吧:
我们在调试时监视每个值的变化:
经过我们不断地按f11键,我们发现arr[12]的值总是和i的值一起变化,我们猜测i和arr[12]是占用同一块内存空间的。
通过调试,我们也确实发现arr[12]和i的地址是一样的:
当我们先定义arr数组,再定义i程序的运行结果就不一样了:
#include<stdio.h> int main() { int arr[10] = { 1,2,3,4,5,6,7,8,9,10 }; int i = 0; for (i = 0; i <= 12; i++) { arr[i] = 0; printf("hehe\n"); } return 0; }
此时程序崩溃了:
而像这样的一道题曾在某家公司的笔试题出现过:
只要我们按照上边图片上的方式回答,这10分的题就能轻松到手了