第11课 enum、sizeof、typedef 分析
2016-03-25 19:47
309 查看
1. enum枚举类型
1.1 使用方法
(1)enum是C语言中的一种自定义类型
(2)enum值是可以根据需要自定义的的整型值
(3)第一个定义的enum值默认为0。
(4)默认情况下的enum值是在前一个定义值的基础上加1
(5)enum类型的变量只能取定义时的离散值
1.2 枚举类型的特殊意义
(1)enum中定义的值是C语言中真正意义上的常量
(2)在工程中enum多用于定义整型常量
【实例分析】enum的使用
2. sizeof关键字的用法
2.1 sizeof简介
(1)sizeof是编译器的内置指示符
(2)sizeof用于计算类型或变量所占的内存大小
(3)sizeof的值在编译期就己经确定
2.2 为sizeof关键字正名——sizeof是C语言的内置关键字而不是函数
(1)在编译过程中所有的sizeof将被具体的数值所替换
(2)程序的执行过程与sizeof没有任何关系
【编程实验】sizeof的本质
3. typedef的意义
(1)typedef用于给一个己经存在的数据类型重命名
(2)typedef本质上不能产生新的类型
(3)typedef重命名的类型
①可以在typedef语句之后定义
②不能被unsigned和signed修饰(即不能再定义为无符号或有符号)
用法:typedef type new_name;
【实例分析】typedef使用示例
4. 小结
(1)enum用于定义离散值类型
(2)enum定义的值是真正意义上的常量
(3)sizeof是编译器的内置指示符
(4)sizeof不参与程序的执行过程
(5)typedef用于给类型重命名:重命名的类型可以在typedef语句之后定义
1.1 使用方法
(1)enum是C语言中的一种自定义类型
(2)enum值是可以根据需要自定义的的整型值
(3)第一个定义的enum值默认为0。
(4)默认情况下的enum值是在前一个定义值的基础上加1
(5)enum类型的变量只能取定义时的离散值
enum Color { GREEN, //默认GREEN==0; RED= 2, //自定义RED==2; BLUE //默认情况,是在前一个的基础上加1,即BLUE==3 }; enumColor c =GREEN;//定义c变量,并初始化为GREEN printf("%d\n",c);
1.2 枚举类型的特殊意义
(1)enum中定义的值是C语言中真正意义上的常量
(2)在工程中enum多用于定义整型常量
【实例分析】enum的使用
#include <stdio.h> enum //无名枚举,用于定义常量 { ARRAY_SIZE = 10 //定义数组大小,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 = 0; for(i=0; i<ARRAY_SIZE; i++) { array[i] = i + 1; } } void PrintArray(int array[]) { int i = 0; for(i=0; i<ARRAY_SIZE; i++) { printf("%d\n", array[i]); } } int main() { enum Color c = GREEN; //定义变量c并初始化为GREEN int array[ARRAY_SIZE] = {0}; PrintColor(c); InitArray(array); PrintArray(array); return 0; }
2. sizeof关键字的用法
2.1 sizeof简介
(1)sizeof是编译器的内置指示符
(2)sizeof用于计算类型或变量所占的内存大小
(3)sizeof的值在编译期就己经确定
2.2 为sizeof关键字正名——sizeof是C语言的内置关键字而不是函数
(1)在编译过程中所有的sizeof将被具体的数值所替换
(2)程序的执行过程与sizeof没有任何关系
int var =0; int size = sizeof(var++); //在编译期,该行的size值就被计算出来了,并 //被替换为类似int size=4;这样的语句。即己经 //最终的代码己经没有var++的语句了。(注意, //var++可看作是var = var+1;所以sizeof(var++) //相当于计算最终的变量var的大小)。 printf("var = %d, size = %d\n",var,size); //输出0,4。而不是1,4;
【编程实验】sizeof的本质
#include <stdio.h> int f() { printf("I like programming!\n"); return 0; } int main() { int var = 0; int size = sizeof(var++); //该行在编译期被替换为int size =4; //所以运行时,不存在var++之类的代码了 printf("var = %d, size = %d\n", var, size); size = sizeof(f()); //该行在编译期被替换为size = sizeof(函数的返回值类型) =4; //即最终代码没有f()函数的调用,也就不会输出f()里面的printf printf("size = %d\n", size); return 0; }
3. typedef的意义
(1)typedef用于给一个己经存在的数据类型重命名
(2)typedef本质上不能产生新的类型
(3)typedef重命名的类型
①可以在typedef语句之后定义
②不能被unsigned和signed修饰(即不能再定义为无符号或有符号)
用法:typedef type new_name;
【实例分析】typedef使用示例
#include <stdio.h> typedef int Int32; //先定义类型后重命名类型 struct _tag_point { int x; int y; }; typedef struct _tag_point Point; //定义一个未命名类型,并用typedef重命名 typedef struct { int length; int array[]; } SoftArray; //先重命名,再定义类型——看似不合法、别扭,但实际上正确的 //可理解为,typedef并不给进行类型检查,只是简单去给一种类型起个别名, //如,本例本struct _tag_list_node重命名为ListNode,以后编译过程中遇到 //ListNode,就用其实际的类型为struct _tag_List_Node来替换. typedef struct _tag_list_node ListNode; //先重命名 struct _tag_list_node //再定义类型 { ListNode* next; }; int main() { Int32 i = -100; // int unsigned Int32 ii = 0; //error,不能为重命名类型指定义为signed或unsigned Point p; // struct _tag_point SoftArray* sa = NULL; ListNode* node = NULL; // struct _tag_list_node* return 0; }
4. 小结
(1)enum用于定义离散值类型
(2)enum定义的值是真正意义上的常量
(3)sizeof是编译器的内置指示符
(4)sizeof不参与程序的执行过程
(5)typedef用于给类型重命名:重命名的类型可以在typedef语句之后定义
相关文章推荐
- fopen函数使用基础
- 图示经典算法--插入排序
- Linux性能分析的前60000毫秒
- 《MySQL学习笔记》:ORDER BY的使用
- 判断数组是不是二叉搜索树的前序遍历结果
- 讲一讲CSS的position/float/display都有哪些取值
- MySQL存储过程
- PHPExcel中open_basedir restriction in effect的解决方法
- open函数使用基础
- 从Web Service获取JSON格式数据
- IOS开发之storyBoard以及xib的使用
- HDU 1856 More is better
- iOS-百度地图添加标注自定义气泡
- 日记,记日
- objective-C学习笔记(八) 集合类型 Collection Types
- cocos2dx之box2d的使用
- Linux性能分析的前60000毫秒
- 【机器学习】感知机学习---《统计学习方法》学习笔记
- 树状数组--K.Bro Sorting
- <meta>标签用法