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

   struct d
{ }; int main() { struct d d1; struct d d2; printf("%d,%0x\n",sizeof(d1),&d1); //求内存大小,及结构体变量的地址
printf("%d,%0x\n",sizeof(d1),&d2); }

不同的编译器,分配的大小不一样,一般取0个字节或1个字节。

柔性数组:数组大小待定的数组,C语言中结构体最后一个元素可以是大小未知的数组,C语言中可以由结构体产生柔性数组:

 struct softarray

 {

   int len;

   int array[];

 };

那么这个结构体的大小是多少?  最后的未知大小的数组处理为0个字节,所以说整个结构体变量的空间就是其他变量的空间之和。

 typedef struct _soft_array
{
int len;
int array[];
}SoftArray; int main()
{
int i = ;
SoftArray* sa = (SoftArray*)malloc(sizeof(SoftArray) + sizeof(int) * ); sa->len = ; for(i=; i<sa->len; i++)
{
sa->array[i] = i + ;
} for(i=; i<sa->len; i++)
{
printf("%d\n", sa->array[i]);
} free(sa); return ;
}

struct中每个域都在内存中分配空间;union只分配最大域的空间,所有域共享这个空间;union受系统大小端的影响:
大端模式:内存的高地址位存放数据的高字节

小端模式:内存的低地址位存放数据的高字节

 union c

 {

   int i;

   char cc;

 }  // 分配最大域空间,即4个字节

 union c abc;

 c.i=;

 printf("%d\n",c.cc); //大端模式:0,小端模式:1

enum:
是一种自定义类型,默认的常量的值均为整数,且第一个常量取值为0(如果不指定),其后的每一个常量均是在该常量前一个常量前加1,enum类型的变量只能取离散的值:

 enum color
{
green,
red=,
blue,
black
};
enum color c =green;
printf("%d\n",c); //
enum color c =blue;
printf("%d\n",c); //
enum color c =black;
printf("%d\n",c); //

枚举类型和#define的区别:
#define 宏常量只是简单的进行值替换,枚举常量是真正意义上的常量

#define 宏常量美誉类型信息,enum是一种变量类型

typedf:

用来给一个已经存在的数据类型重命名,并没有产生新的类型,typedef重定义的类型不能进行unsigned和signed扩展。

typedef与#define的区别:

 typedef char* path;
path p1,p2; //相当于char* p1,char* p2
#define path char*;
path p1,p2; // 相当于 char * p1,char p2

struct和union,enum分析的更多相关文章

  1. struct、union、enum and sizeof

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

  2. 关于C与C++的struct,union,enum用法差异

    对着代码说话: #include <stdio.h> #include <stdlib.h> struct test { int abc; }; enum _enum {A,B ...

  3. 【转】结构struct 联合Union和枚举Enum的细节讨论

    结构struct 联合Union和枚举Enum的细节讨论 联合(Union)是一种构造数据类型,它提供了一种使不同类型数据类型成员之间共享存储空间的方法,同时可以实现不同类型数据成员之间的自动类型转换 ...

  4. C语言进阶——struct和union分析10

    struct的小秘密: C语言中的struct可以看作变量的集合 struct的问题:空结构体占用多大内存呢? 程序实例1: #include <stdio.h> struct TS { ...

  5. 关于C中struct和union长度的详解

    这几天看<代码大全>中的第十三章---不常见的数据类型,里面讲解到了C语言中的struct以及对指针的解释,联想到以前看过相关的关于C语言中stuct长度的文章,只是现在有些淡忘了,因此今 ...

  6. struct和union

    struct的小秘密 C语言中的struct可以看做变量的集合,struct的问题: 空结构体占用多大内存? 例子1:空结构体的大小 #include<stdio.h> struct ST ...

  7. 【转】C/C++ struct/class/union内存对齐

    原文链接:http://www.cnblogs.com/Miranda-lym/p/5197805.html struct/class/union内存对齐原则有四个: 1).数据成员对齐规则:结构(s ...

  8. struct 和union的区别

    union ( 共用体):构造数据类型,也叫联合体  用途:使几个不同类型的变量共占一段内存(相互覆盖) struct ( 结构体 ):是一种构造类型 用途: 把不同的数据组合成一个整体——自定义数据 ...

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

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

  10. struct与 union的基本用法

    结构体与联合体是C语言的常见数据类型,可对C的基本数据类型进行组合使之能表示复杂的数据结构,意义深远,是优异代码的必备工具.一.        struct与 union的基本用法,在语法上union ...

随机推荐

  1. 图像识别___YUV学习手记

    视觉专家很早以前就知道,人眼对亮度分辨率的敏感度高于对色彩分辨率的敏感度. 这就是早期模拟和数字压缩形式的主要动因.视频信号会分解为亮度和色度,这两个是组成色彩的元素,这类似于图像可以分解为红.绿.蓝 ...

  2. beego注解路由 [自定义方法]

    背景: beego生成的controller里面,默认get请求到由Get()方法处理:post请求由Post()方法处理 etc. 如果想自定义方法来处理请求,改怎么做? 直接拿beego的文档来说 ...

  3. delphi java 日期 转换 获取Unix时间戳

    获取Unix时间戳 http://www.cnblogs.com/findumars/p/4716753.html 最简单准确一句话 Result:=IntToStr(  DateTimeToUnix ...

  4. 尚硅谷springboot学习20-web开发简介

    使用SpringBoot 1).创建SpringBoot应用,添加我们需要的模块: 2).SpringBoot已经默认将这些场景配置好了,只需要在配置文件中指定少量配置就可以运行起来 3).自己编写业 ...

  5. harbor仓库镜像的删除

    harbor仓库镜像的删除 刚开始自己摸索了下,直接webui界面删除后,发现仓库空间未释放 上传之前仓库空间占用为 上传之后仓库空间占用为 在webui界面上删除镜像后 查看大小 依旧为286m,到 ...

  6. 转: HTML5之placeholder属性以及如何更改placeholder属性中文字颜色

    今天在群里看到群友问了一个这样的问题,就是如何更改placeholder属性中文字的颜色,以前用过这属性,却是没更改过颜色,于是便试了试,中途遇到些问题,查找资料后特来总结一下. 熟悉HTML5的人应 ...

  7. 深入jUI(DWZ)

    -----------------------------------------------------------------------------主页面index.html <html& ...

  8. Matlab实现单层感知机网络识别字母

    感知机网络的参数设置 % 具体用法: % net=newp(pr,T,TF,LF); % % pr: pr是一个R×2的矩阵,R为感知器中输入向量的维度(本例中使用35个字符表征一个字母,那么其维度为 ...

  9. GDI+ 实现透明水印和文字

    最近给<JPEG浏览缩放器>增加了水印功能,在设计的过程中,参考了网上的文章,但是发现文章使用的GDI+ API封装包不是我现在使用的那一套,目前DELPHI使用的GDI+ API封装包有 ...

  10. thymeleaf 字面量