Loading...
墨滴

心若明月

2021/03/07  阅读:12  主题:萌绿

未命名文章

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


#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;所以一直会不断循环;


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

心若明月

2021/03/07  阅读:12  主题:萌绿

作者介绍

心若明月