关于嵌套结构体大小的计算
先看下面的代码:
#include<iostream>
using namespace std;
struct ss1{ int a; double b; struct aa{ int aa; double cc; }aa; int c;
}ss1;
struct ss2{ int a; double b; struct aa{ int aa; double cc; }; int c;
}ss2;
int main()
{ cout << sizeof(ss1) << endl; cout << sizeof(ss2) << endl; }
这是一段C++代码,编译顺利通过。结构体struct ss1和struct ss2中都定义了同一个结构体struct aa,所以C++中结构体内部的结构体作用域仅仅局限于上层结构体内,
另外,结构体struct ss1中定义并声明了结构体变量struct aa aa;结构体struct ss2中定义了结构体变量struct aa ,并没有声明struct aa的结构体变量;通过sizeof()函数可以得出,这两个结构体struct ss1和struct ss2占用不同大小的内存空间。
以上是在C++中。
那么在C语言中呢。内层结构体struct aa的作用于适用于全局,也就是说上述代码在编译的时候,会提示struct aa重复定义的错误。这是第一点不同。另外,无论内层结构体struct aa有没有声明相应的结构体变量,都会占据一定的内存空间,也就是说,在C中,上述的两个结构体struct ss1和struct ss2会占据相同的内存空间。这是第二点不同。相关的证明,大家可以自己修改代码测试,这里不在累赘。
关于嵌套结构体大小的计算相关推荐
- C语言结构体大小;结构体嵌套结构体大小的计算方法分析
C语言结构体大小:结构体嵌套结构体大小的计算方法分析! 在了解结构体大小如何计算之前,我们首先得了解结构体的对齐规则: 第一个成员在与结构体变量偏移量为0的地址处: 其他成员变量要对齐到某个数字(对齐 ...
- 结构体大小的计算 用最简单的方法,通俗易懂的方法计算结构体大小
结构体计算要遵循字节对齐原则 结构体默认的字节对齐一般满足三个准则: 1) 结构体变量的首地址能够被其最宽基本类型成员的大小所整除: 2) 结构体每个成员相对于结构体首地址的偏移量(offset)都是 ...
- 【C语言进阶深度学习记录】二十 结构体大小计算与结构体内存布局的详细方法
结构体大小的计算往往是面试笔试常考的知识.对于简单的结构体,可以一眼看出来,对于复杂的结构体,该如何计算结构体占用内存的大小呢? 本文学习所使用的编译器是gcc 4.4.5 使用其他编译器或者使用Wi ...
- 结构体大小的计算方法
结构体大小的计算需同时满足以下几点 一.结构体成员的偏移量必须是当前成员大小的整数倍.(0是任何数的整数倍) 举一个例子 struct Test1{char a; // 当前偏移量为0,是char所占 ...
- c语言 struct结构体大小计算方法
struct结构体大小的计算方法 1)第一个成员处在偏移地址0的地方 2)每个成员按其类型大小和pack参数中较小(编译器默认#pragma pack(4) 4字节对齐)的一个进行对齐 偏移地址必须能 ...
- 面试必问: 结构体大小的计算方法
结构体大小的计算需同时满足以下几点 一.结构体成员的偏移量必须是当前成员大小的整数倍.(0是任何数的整数倍) 举一个例子 struct Test1{char a; // 当前偏移量为0 ...
- 结构体大小之嵌套结构体的长度计算
计算嵌套结构体的长度需要掌握一般结构体的计算方法,这篇文章是我看的中写的不错的,但是他嵌套结构体的计算写的不太好,在他的基础上进行一些改进: https://blog.csdn.net/qq_1932 ...
- (C语言)计算结构体大小——结构体内存对齐
本篇文章计划用简单的方式向大家介绍如何计算结构体大小这一问题 首先我们必须明确一件事,想要计算结构体大小,就不得不了解结构体内存对齐的规则 一.结构体的对齐规则 1.第一个成员在在与结构体变量为0的地 ...
- 【转】彻底搞清计算结构体大小和数据对齐原则
数据对齐: 许多计算机系统对基本数据类型合法地址做出了一些限制,要求某种类型对象的地址必须是 某个值K(通常是2,4或8)的倍数.这种对齐限制简化了形成处理器和存储器系统之间的接口的硬件 设计.例如, ...
最新文章
- xcode6 dyld_sim is not owned by root
- 设置JFrame背景图片
- Tuple解决在视图中通过razor获取控制器传递给视图的匿名对象的报错问题
- oracle恢复库覆盖原来的库,oracle如何恢复被覆盖的存储过程
- java uri_Android中的Uri与Java中的URI类
- [转]Design Pattern Interview Questions - Part 2
- Bootstrap 折叠插件
- 三星上线售价99万8K电视 网友:是不是多打了一位数
- 二、oracle sql*plus常用命令
- Spring MVC + Spring + Hibernate + mysql 注册登陆入门实例
- mfc 获取窗口在屏幕中的位置_CSocket与CAsynSocket中的阻塞与非阻塞
- 书单丨把握Java技术发展的新趋势!
- MyBatis的ResultMaps
- 【Codeforces Round #516_div2】Labyrinth【迷宫搜索】
- 使用kmean进行图像分割 使用CRFs进行分割后处理
- 品牌与商家如何做电商直播运营的呢?
- 2020年十大开源免费的WEB应用防火墙
- opencv保存单通道图片
- 考研数学一数学二数学三真题1987年-2021年所有历年真题及详解
- php百度快照劫持,最新wordpress程序被挂马,百度快照被劫持的解决方法 | linux系统运维...