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

   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. 查看进程中的socket状态和数量

    程序运行时查看,结果是这样子的 C:\Users\Administrator>netstat -ano|findstr TCP TIME_WAIT TCP TIME_WAIT TCP TIME_ ...

  2. Linux kafka 单机安装

    Kafka地址(选择最新地址1.1.1) http://archive.apache.org/dist/kafka/

  3. dpkg卸载

    from:https://jingyan.baidu.com/article/f54ae2fc2724a71e92b849c4.html 选择 dpkg -l来查看软件的状态. 选择 dpkg -P来 ...

  4. html:meta

    <meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale= ...

  5. 2018SDIBT_国庆个人第二场

    A.codeforces1038A You are given a string ss of length nn, which consists only of the first kk letter ...

  6. js判断对象

    一般学java的小伙伴,刚开始写js时如果遇到要判断一个字符串是否不为空,往往会这样写 if(str != undefined && str != null && st ...

  7. html页面调用servlet中文乱码问题

    1.需要在html中:<meta charset=utf-8" /> 2.在servlet的doPost方法中 首先:response.setContentType(" ...

  8. Visual Studio for Mac 使用笔记

    无法打开控制台运行程序 Project -> Project Options -> Run -> Configurations -> Default 勾选Run on exte ...

  9. [图解tensorflow源码] 入门准备工作附常用的矩阵计算工具[转]

    [图解tensorflow源码] 入门准备工作 附常用的矩阵计算工具[转] Link: https://www.cnblogs.com/yao62995/p/5773142.html  tensorf ...

  10. 远程批量获取Linux和Windos操作系统版本(内核)

    在不登录远程主机的情况下,可以查看远程主机的服务器操作系统版本(内核). 脚本执行前提: 1.拷贝check_snmp到脚本执行的主机中或在此主机中安装nagios; 2.保持list.txt中只有一 ...