哈喽,大家好,今天我们来学习一道面试过程中可能会出现的一道笔试题
有这样一段代码,分析在VS编译器的运行结果
#includeint 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程序的运行结果就不一样了:
#includeint 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分的题就能轻松到手了