为什么这段使用嵌套结构体的C++代码运行输出结果为3?
C++代码输出结果分析
首先附上完整代码:
#include <iostream> using namespace std; struct sct { int t[2]; }; struct str { sct t[2]; }; int main() { str t[2] = { {0,2,4,6}, {1,3,5,7} }; std::cout << t[1].t[0].t[1]; }
步骤1:梳理结构体嵌套的内存布局
两个结构体都是无自定义构造函数的聚合类型,内存按成员声明顺序连续排布:
sct结构体仅包含1个int数组成员t,长度为2,所以单个sct对象占2个int的连续空间str结构体仅包含1个sct数组成员t,长度为2,所以单个str对象占2*2=4个int的连续空间
步骤2:拆解聚合初始化的赋值逻辑
main函数中定义的是str t[2],也就是包含2个str元素的数组,总共有2*4=8个int的连续空间,对应的初始化列表{ {0,2,4,6}, {1,3,5,7} }会按顺序依次填充:
- 第一个
str元素t[0]对应初始值{0,2,4,6},按内存顺序赋值结果为:t[0].t[0].t[0] = 0t[0].t[0].t[1] = 2t[0].t[1].t[0] = 4t[0].t[1].t[1] = 6
- 第二个
str元素t[1]对应初始值{1,3,5,7},按内存顺序赋值结果为:t[1].t[0].t[0] = 1t[1].t[0].t[1] = 3t[1].t[1].t[0] = 5t[1].t[1].t[1] = 7
步骤3:匹配输出语句的取值
代码输出的是t[1].t[0].t[1],对应上面的赋值结果就是3,所以最终打印结果为3。
内容的提问来源于stack exchange,提问作者cal223
相关产品推荐
相关产品推荐

