面试官:请输出下面的结果?

272 阅读1分钟

面试官:请输出下面的结果?

#include <iostream>using namespace std;int main(){ int i = 0; int a[3] = {0}; for (; i <= 3; i++) {  a[i] = 0;  printf("hello world \n"); } return 0;}

首先,我来公布下答案:

在linux x86 下运行,会发现程序会循坏运行,不断打印`hello world`;

这里大家肯定很奇怪这个为什么会是循环?

接下来,为大家揭晓答案?

首先看下数组地址计算公式:

base_address + n*type_size

在linux x86 下运行,会发现程序会循坏运行,不断打印hello world;

分析:

函数体内的局部变量存在栈上,且是连续压栈,i比arr的地址大,所以栈内存分布:

根据数据地址计算:

a[3] = base + 3*size_type 

​ 其实地址已经到了i,a[3] = 0 ,就是i = 0;所以一直会不断循环;

首发:微信公众号:后台服务器开发