C语言——经典面试题

哈喽,大家好,今天我们来学习一道面试过程中可能会出现的一道笔试题

有这样一段代码,分析在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分的题就能轻松到手了

文章来源地址https://uudwc.com/A/Weda

原文地址:https://blog.csdn.net/m0_73648729/article/details/130832279

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请联系站长进行投诉反馈,一经查实,立即删除!

h
上一篇 2023年06月16日 15:45
数字信号处理第六次试验:数字信号处理在双音多频拨号系统中的应用
下一篇 2023年06月16日 15:45