C语言enum和typedef
一、enum
1、enum用于定义离散值类型
2、enum定义的值是真正意义的常量
二、typedef
1、typedef用于给一个已经存在的数据类型重命名
2、typedef本质上不产生新类型(面试可能问你能说说typedef具体意义么?这时面试者千万不能说:typedef用于产生一个新类型)
3、typedef重命名的类型:
(1)、可以再typedef语句之后定义(注意:第一次看见的人,可能不理解,但是确实可以)
(2)、不能被unsigned和signed修饰
用法:
typedef type new_name
三、测试代码
#include <stdio.h> #include <malloc.h> #define SIZE 10 enum { ARRAY_SIZE = SIZE, LENGTH_ARRAY = SIZE, }; enum Color { RED, GREEN = 2, BLUE, }; void Pinitcolor(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; default: printf("Color : RED (0x%08X)\n",c); break; } } void Initarray(int array[]) { int i; for(i = 0;i < LENGTH_ARRAY;i++) { array[i] = i + 1; } } void Printarray(int array[]) { int i; for(i = 0;i < LENGTH_ARRAY;i++) { printf("array[%d] = %d\n",i,array[i]); } } typedef int Int32; struct _tag_point { int x; int y; }; typedef struct _tag_point Point; typedef struct { int length; int array[]; }SoftArray; typedef struct _tag_list_node ListNode; struct _tag_list_node { ListNode* next; }; int main() { Int32 i = -100; //int //unsigned Int32 ii = 1; //编译错误 typedef前面不能用unsigned或者signed Point p; SoftArray* sa = NULL; ListNode* node = NULL; enum Color c = BLUE; int array[LENGTH_ARRAY] = {0}; Pinitcolor(c); Initarray(array); Printarray(array); return 0; }
代码很简单,这里不讲了