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;
}
代码很简单,这里不讲了