linux下enum类型占几个字节,第11课 - enum, sizeof, typedef 分析

第11课 - enum, sizeof, typedef 分析

5ffbad8eb824a55b8d455357271b2058.png

1. enum介绍

(1)enum是C语言中的一种自定义类型,和struct、union地位相同,格式如下:

// enum每个值的最后以逗号结尾

enum Color {

GREEN,

RED,

BLUE

};

// printf("%zu\n", sizeof(enum Color)); ==> 输出的结果为4,表明enum类型的变量占用4字节

(2)enum定义的第一个值默认情况下为0,后一个的值在前一个值的基础上加1

(3)enum在程序中有两种用法: ① 定义常量    ② 定义离散的整型值类型

37a5e46d40eb1133aaf4ae5f84ef58a8.png

(4)enum中定义的值是C语言中真正意义的常量,在工程中enum多用于定义整型常量。下面的enum没有名字,不能用来定义枚举变量,仅仅用来定义常量。

enum { // 无名枚举,用于定义常量

ARRAY_SIZE =

};

int array[ARRAY_SIZE] = {}; // 使用ARRAY_SIZE定义数组大小

int i = ;

for (i=; i

array[i] = i + ;

}

【enum的用法】

#include

enum

{

ARRAY_SIZE = //定义数组大小,ARRAY_SIZE是常量运行时无法改变

};

enum Color

{

RED = 0x00FF0000,

GREEN = 0x0000FF00,

BLUE = 0x000000FF

};

//打印,参数为枚举类型

void PrintColor(enum Color c)

{

switch( c )

{

case RED:

printf("Color: RED (0x%08X)\n", c);

break;

case GREEN:

printf("Color: GREEN (0x%08X)\n", c);

break;

case BLUE:

printf("Color: BLUE(0x%08X)\n", c);

break;

}

}

//初始化数据

void InitArray(int array[])

{

int i = ;

for(i=; i

{

array[i] = i + ;

}

}

void PrintArray(int array[])

{

int i = ;

for(i=; i

{

printf("%d\n", array[i]);

}

}

int main()

{

enum Color c = GREEN; //定义变量c并初始化为GREEN

int array[ARRAY_SIZE] = {};

PrintColor(c);

InitArray(array);

PrintArray(array);

return ;

}

执行结果:

882a782b9d7a0cb6badd33cf430bbec5.png

2. sizeof关键字的用法

(1)sizeof是C语言的一个内置关键字而不是函数,初学者往往因为sizeof后面的一对括号将其误认为是函数

(2)sizeof 用于计算 类型或 变量所占的内存大小

sizeof 用于类型:

sizeof(type)

sizeof 用于变量:

sizeof(var) 或 sizeofvar     //这里sizeof与var之间使用空格间隔,也证明了sizeof是关键字而不是函数,函数是没有这种语法的

#include

int main()

{

int var = ;

printf("%zu\n", sizeof(int)); //

printf("%zu\n", sizeof(var)); //

printf("%zu\n", sizeof var); //

return ;

}

(3)sizeof的值在编译期就已经确定。在编译过程中所有的sizeof将被具体的数值所替换,程序的执行过程与sizeof没有任何关系。看下面这段程序会输出什么?

#include

int func() {

printf("This is test!\n");

return ;

}

int main()

{

int var = ;

int size = sizeof(var++); // 在编译期直接替换为4

printf("var = %d, size = %d\n", var, size); // var = 0, size = 4

size = sizeof(func()); // 因为func()的返回值类型为int,这里直接替换为4,func()并不会被执行

printf("size = %d\n", size);

return ;

}

执行结果:

9f23b0a5c80cf70917b296bde4108b1f.png

3. typedef的意义

(1)typedef 用于给一个已经存在的数据类型重命名,typedef 不能产生新的类型

(2)不能使用unsigned和signed修饰 typedef 重命名的类型

8cca90f2ee08a064a7ab1b5a386c7f16.png

(3)typedef用法:

typedef type new_name;

其中type的定义可以在这条语句的后面出现,不必非要在这条语句的前面出现。编译器在处理这条语句时,只是将new_name认为是type的新名称,并不关心new_name的具体定义。

#include

typedef int Int32;

struct _tag_point

{

int x;

int y;

};

typedef struct _tag_point Point; // 前面先定义了类型,然后再重命名

typedef struct // struct没有名字,使用typedef重命名,这种用法很常见

{

int length;

int array[];

} SoftArray;

// 这里先重命名,定义放在了后面,这样也是允许的

// 编译器在处理typedef时仅仅是给一个类型重命名,并不关心这个类型具体是什么样的

// 以后在程序中碰到ListNode就当做struct _tag_list_node

typedef struct _tag_list_node ListNode; //先重命名

struct _tag_list_node //再定义类型

{

ListNode* next; // 在链表中常看到这种写法

};

int main()

{

Int32 i = -; // int

// unsigned Int32 ii = 0; //不能使用signed、unsigned修饰

Point p; // struct _tag_point

SoftArray* sa = NULL;

ListNode* node = NULL; // struct _tag_list_node*

return ;

}

C语言进阶——enum, sizeof, typedef 分析11

枚举类型的使用方法: enum是C语言的 一种自定义类型 enum值是可以根据需要自定义的整型值 第一个enum的值默认为0 默认情况下的enum值是在前一个定义值的基础上加 1 enum类型的变量只 ...

enum sizeof typedef分析

1.枚举类型的使用方法 enum是C语言中的一种自定义类型 enum值是可以根据需要自定义的整型值 第一个定义的enum值默认为0 默认情况下的enum值是在前一个定义值的基础上加1 enum类型的变 ...

第11课 enum、sizeof、typedef 分析

1. enum枚举类型 1.1 使用方法 (1)enum是C语言中的一种自定义类型 (2)enum值是可以根据需要自定义的的整型值 (3)第一个定义的enum值默认为0. (4)默认情况下的enum值 ...

第11课 enum,sizeof,typedef分析

枚举类型的使用方法: enum的地位和struct是相等的,enum主要用来根据需要定义一些离散的值. 枚举类型的特殊意义: 工程中常用无名枚举来定义常量. 程序示例: #include

enum,sizeof,typedef

枚举类型的使用方法 enum是C语言中的一种自定义类型 enum值可以根据需要自定义整形值 第一个定义的enum值默认为0 默认情况下的enum值是在前一个定义值得基础上加1 enum类型的变量只能去 ...

C++11的enum class & enum struct和enum

C++11的enum class & enum struct和enum C++标准文档--n2347(学习笔记) 链接:http://www.open-std.org/jtc1/sc22/wg ...

enum与typedef enum

enum与typedef enum的用法 在程序中,可能需要为某些整数定义一个别名,我们可以利用预处理指令#define来完成这项工作,您的代码可能是: #define MON  1#define T ...

[转]C++11的enum class & enum struct和enum

1. 旧版enum存在的问题 问题 描述 1 向整形的隐式转换(Implicit conversion to an integer) 2 无法指定底层所使用的数据类型(Inability to spe ...

【转】C++11的enum class & enum struct和enum

转自:https://blog.csdn.net/sanoseiichirou/article/details/50180533 C++标准文档——n2347(学习笔记) 链接:http://www. ...

随机推荐

MySQLdb的一些经验

遇到过的几类问题: 如果保持长连接,即使在mysql数据库默认的connection timeout内,也有可能出现"mysql server has gone away".还有另 ...

zoj3231 Apple Transportation(最大流)

转载请注明出处: http://www.cnblogs.com/fraud/          ——by fraud Apple Transportation Time Limit: 1 Second ...

纯js客服插件集qq、旺旺、skype、百度hi、msn

原文 纯js客服插件集qq.旺旺.skype.百度hi.msn 客服插件,集qq.旺旺.skype.百度hi.msn 等 即时通讯工具,并可自己添加支持的通讯工具,极简主义,用法自己琢磨.我的博客 h ...

Apicloud学习第四天

apicloud存储机制,添加和获取存储的数据 $api.setStorage('currentCity', cityList[i_]); $api.getStorage('currentCity') ...

win 10 亮度调节不能使用了

我的解决办法的前提:装过teamviewer ,然后每次系统推送大升级似乎都会无法调节亮度,如果不是这个前提自己找别的办法吧 teamviewer 就是一个流氓软件. 每次更新之后都末名奇妙的不能调节 ...

含有package关键字的java文件在命令行运行报错

程序中含有package关键字,使用命令行运行程序时出现"找不到或无法加载主类",而使用Eclipse软件可以正常运行程序的可能解决办法. 在包下的类,在Java源文件的地方编译后 ...

dos2章

讲FOR之前呢,咋先告诉各位新手朋友,如果你有什么命令不懂,直接在CMD下面输入: name /? 这样的格式来看系统给出的帮助文件,比如for /? 就会把FOR命令的帮助全部显示出来!当然许多菜鸟 ...

as3 AIR 添加或删除ApplicationDirectory目录下文件

AIR的文件目录静态类型有五种: File.userDirectory //指向用户文件夹 File.documentsDirectory //指向用户文档文件夹 File.desktopDirect ...

VCL编写笔记整理

unit hzqEdit1; interface uses  SysUtils, Classes, Controls, StdCtrls; type  TEditDataType = (dtpStri ...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值