struct和union,enum分析
空结构体占用的内存多大?
1 struct d 2 { 3 4 }; 5 6 int main() 7 8 { 9 10 struct d d1; 11 12 struct d d2; 13 14 printf("%d,%0x\n",sizeof(d1),&d1); //求内存大小,及结构体变量的地址 15 printf("%d,%0x\n",sizeof(d1),&d2); 16 17 }
不同的编译器,分配的大小不一样,一般取0个字节或1个字节。
柔性数组:数组大小待定的数组,C语言中结构体最后一个元素可以是大小未知的数组,C语言中可以由结构体产生柔性数组:
1 struct softarray 2 3 { 4 5 int len; 6 7 int array[]; 8 9 };
那么这个结构体的大小是多少? 最后的未知大小的数组处理为0个字节,所以说整个结构体变量的空间就是其他变量的空间之和。
1 typedef struct _soft_array 2 { 3 int len; 4 int array[]; 5 }SoftArray; 6 7 int main() 8 { 9 int i = 0; 10 SoftArray* sa = (SoftArray*)malloc(sizeof(SoftArray) + sizeof(int) * 10); 11 12 sa->len = 10; 13 14 for(i=0; i<sa->len; i++) 15 { 16 sa->array[i] = i + 1; 17 } 18 19 for(i=0; i<sa->len; i++) 20 { 21 printf("%d\n", sa->array[i]); 22 } 23 24 free(sa); 25 26 return 0; 27 }
struct中每个域都在内存中分配空间;union只分配最大域的空间,所有域共享这个空间;union受系统大小端的影响:
大端模式:内存的高地址位存放数据的高字节
小端模式:内存的低地址位存放数据的高字节
1 union c 2 3 { 4 5 int i; 6 7 char cc; 8 9 } // 分配最大域空间,即4个字节 10 11 union c abc; 12 13 c.i=1; 14 15 printf("%d\n",c.cc); //大端模式:0,小端模式:1
enum:
是一种自定义类型,默认的常量的值均为整数,且第一个常量取值为0(如果不指定),其后的每一个常量均是在该常量前一个常量前加1,enum类型的变量只能取离散的值:
1 enum color 3 { 5 green, 7 red=2, 9 blue, 11 black 13 }; 14 enum color c =green; 15 printf("%d\n",c); //0 16 enum color c =blue; 17 printf("%d\n",c); //3 18 enum color c =black; 19 printf("%d\n",c); //4
枚举类型和#define的区别:
#define 宏常量只是简单的进行值替换,枚举常量是真正意义上的常量
#define 宏常量美誉类型信息,enum是一种变量类型
typedf:
用来给一个已经存在的数据类型重命名,并没有产生新的类型,typedef重定义的类型不能进行unsigned和signed扩展。
typedef与#define的区别:
1 typedef char* path; 2 path p1,p2; //相当于char* p1,char* p2 3 #define path char*; 4 path p1,p2; // 相当于 char * p1,char p2
转载于:https://www.cnblogs.com/data1213/p/4821237.html
struct和union,enum分析相关推荐
- struct、union、enum and sizeof
struct 1.结构体和数组的差别:能够再结构体里声明数组.结构体变量能够相互赋值.而数组不行. 2.struct与class的差别:class的成员訪问权限默认是private,而struct成员 ...
- c语言struct_Introduction to CSAPP(十七):复杂数据组织与C语言的 struct与union
如果说数组是同一种类型的数据的连续排列的数据组织形式,那么对于不同类型的数据来说,他们被有机组织起来的方式有两种,分别是struct和union. Struct C语言的 struct 创建一种数据类 ...
- [C/C++基础知识] 面试再谈struct和union大小问题
最近找工作参加了很多笔试,其中考察结构体和联合体的大小问题是经常出现的一个问题.虽然题目简单而且分值比较低,但是还是想再给大家回顾下这些C和C++的基础知识.希望文章对你有所帮助~ P ...
- 数据类型:Struct 和 Union区别
参考:Struct 和 Union区别_firefly_2002的专栏-CSDN博客_union和struct的区别 Struct 和 Union有下列区别: 1.在存储多个成员信息时,编译器会自动给 ...
- C++报错解决:error: ‘int’ is not a class, struct, or union type typedef typename _Sequence::value_
我在使用C++的时候,遇到了如下报错: -> % g++ test.cpp In file included from /usr/include/c++/7/queue:64:0,from te ...
- 转 Struct 和 Union区别 以及 对内存对齐方式的说明
转载地址:http://blog.csdn.net/firefly_2002/article/details/7954458 一.Struct 和 Union有下列区别: 1.在存储多个成员信息时,编 ...
- struct and union
[url]http://hi.baidu.com/tweigh/blog/item/5303d2ef6e2720eace1b3e9d.html[/url] 1. struct的巨大作用 面对一个人的大 ...
- C++ struct 与 union
编码运行环境:VS2017+Win32+Debug,Win32表示生成32bits的应用程序. 文章目录 1.struct 2.union 2.1 基本性质 2.2 高级特性 参考文献 结构体(str ...
- C++ Struct和Union区别
C++ Struct和Union区别 Struct和Union区别 在存储多个成员信息时,编译器会自动给struct每个成员分配存储空间,struct可以存储多个成员信息,而Union每个成员会用同一 ...
- X86汇编中的结构体STRUCT和UNION
X86汇编中的结构体STRUCT和UNION 结构的定义 ; 定义名为Person的结构体 Person STRUCTidNum byte "000000"lastName byt ...
最新文章
- ios 标签 html,ios HTML的标签的过滤
- 云计算Python自动化运维开发实战 三、python文件类型
- 原理分析之一:从JDBC到Mybatis
- Android中measure过程、WRAP_CONTENT详解以及xml布局文件解析流程浅析(下)
- 电子书下载:Learn Office 2011 for Mac OS X
- composer update 的时候提示the requested PHP extension pcntl is missing from your system.的方法处理
- Linux平台常用命令
- 探讨JS合并两个数组的方法
- C++学习笔记章节中 面向对象详解
- 自定义http报头_浅谈http协议(三):HTTP 报文及其结构
- intellij idea 简单使用教程
- iOS Unicode转中文(UTF-8)
- 【114天】尚学堂高琪JAVA300篇视频精华笔记(1-6)
- 分享-IE游览器升级工具
- 10G数据量,只有2G内存,怎样找到中位数?
- 微软AI 绘图工具+ChatGPT免费用,10秒轻松出图,超详细教程,纯干货分享
- 运营笔记:SEO快排那些事儿!
- 无名管道-----实现父子进程相互通信
- 学会应对不同的面试官
- 如何搭建Rtmp服务结合uni-app开发直播APP