空结构体占用的内存多大?

 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分析相关推荐

  1. struct、union、enum and sizeof

    struct 1.结构体和数组的差别:能够再结构体里声明数组.结构体变量能够相互赋值.而数组不行. 2.struct与class的差别:class的成员訪问权限默认是private,而struct成员 ...

  2. c语言struct_Introduction to CSAPP(十七):复杂数据组织与C语言的 struct与union

    如果说数组是同一种类型的数据的连续排列的数据组织形式,那么对于不同类型的数据来说,他们被有机组织起来的方式有两种,分别是struct和union. Struct C语言的 struct 创建一种数据类 ...

  3. [C/C++基础知识] 面试再谈struct和union大小问题

    最近找工作参加了很多笔试,其中考察结构体和联合体的大小问题是经常出现的一个问题.虽然题目简单而且分值比较低,但是还是想再给大家回顾下这些C和C++的基础知识.希望文章对你有所帮助~         P ...

  4. 数据类型:Struct 和 Union区别

    参考:Struct 和 Union区别_firefly_2002的专栏-CSDN博客_union和struct的区别 Struct 和 Union有下列区别: 1.在存储多个成员信息时,编译器会自动给 ...

  5. 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 ...

  6. 转 Struct 和 Union区别 以及 对内存对齐方式的说明

    转载地址:http://blog.csdn.net/firefly_2002/article/details/7954458 一.Struct 和 Union有下列区别: 1.在存储多个成员信息时,编 ...

  7. struct and union

    [url]http://hi.baidu.com/tweigh/blog/item/5303d2ef6e2720eace1b3e9d.html[/url] 1. struct的巨大作用 面对一个人的大 ...

  8. C++ struct 与 union

    编码运行环境:VS2017+Win32+Debug,Win32表示生成32bits的应用程序. 文章目录 1.struct 2.union 2.1 基本性质 2.2 高级特性 参考文献 结构体(str ...

  9. C++ Struct和Union区别

    C++ Struct和Union区别 Struct和Union区别 在存储多个成员信息时,编译器会自动给struct每个成员分配存储空间,struct可以存储多个成员信息,而Union每个成员会用同一 ...

  10. X86汇编中的结构体STRUCT和UNION

    X86汇编中的结构体STRUCT和UNION 结构的定义 ; 定义名为Person的结构体 Person STRUCTidNum byte "000000"lastName byt ...

最新文章

  1. ios 标签 html,ios HTML的标签的过滤
  2. 云计算Python自动化运维开发实战 三、python文件类型
  3. 原理分析之一:从JDBC到Mybatis
  4. Android中measure过程、WRAP_CONTENT详解以及xml布局文件解析流程浅析(下)
  5. 电子书下载:Learn Office 2011 for Mac OS X
  6. composer update 的时候提示the requested PHP extension pcntl is missing from your system.的方法处理
  7. Linux平台常用命令
  8. 探讨JS合并两个数组的方法
  9. C++学习笔记章节中 面向对象详解
  10. 自定义http报头_浅谈http协议(三):HTTP 报文及其结构
  11. intellij idea 简单使用教程
  12. iOS Unicode转中文(UTF-8)
  13. 【114天】尚学堂高琪JAVA300篇视频精华笔记(1-6)
  14. 分享-IE游览器升级工具
  15. 10G数据量,只有2G内存,怎样找到中位数?
  16. 微软AI 绘图工具+ChatGPT免费用,10秒轻松出图,超详细教程,纯干货分享
  17. 运营笔记:SEO快排那些事儿!
  18. 无名管道-----实现父子进程相互通信
  19. 学会应对不同的面试官
  20. 如何搭建Rtmp服务结合uni-app开发直播APP

热门文章

  1. 《精通自动化测试框架设计》—第2章 2.6节使用数据库
  2. createSQLQuery与createQuery的区别
  3. 快速设置XMind中的设置联系
  4. phash图像识别应用
  5. 图书管理系统html_你的毕业设计是 XX 管理系统吗?
  6. Java多线程(线程同步)
  7. win10更改mac地址
  8. bash 别名_Linux的10个方便的Bash别名
  9. 大牛用emacs还是vim_Emacs,Vim还是其他?
  10. 您第一次上网的速度是多少?