面试官:请输出下面的结果?
#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;所以一直会不断循环;
首发:微信公众号:后台服务器开发