关键词:enum
, sizeof
, typedef
1. 枚举类型的使用方法
-
enum
是C语言中的一种自定义类型 -
enum
值是可以根据需要自定义的整形值 - 第一个定义的
enum
值默认为0 - 默认情况下的
enum
值是在前一个定义值的基础上加1 -
enum
类型的变量只能取定义时的离散值
#include <stdio.h>
enum Color
{
GREEN,
RED = 2,
BLUE
};
int main()
{
enum Color green = GREEN;
enum Color red = RED;
enum Color blue = BLUE;
printf("green = %d\n", green);
printf("red = %d\n", red);
printf("blue = %d\n", blue);
return 0;
}
输出结果:
green = 0
red = 2
blue = 3
2. 枚举类型的特殊意义
-
enum
中第一的值是C语言中的真正意义上的常量 - 在工程中
enum
多用于定义整形常量
#include <stdio.h>
// 用无名枚举类型定义整型常量
enum
{
ARRAY_SIZE = 10
};
int main()
{
int array[ARRAY_SIZE] = {0};
for(int i=0; i<ARRAY_SIZE; i++)
{
printf("%d\n", array[i]);
}
return 0;
}
3. enum
的使用
#include <stdio.h>
enum
{
ARRAY_SIZE = 10
};
enum Color
{
RED = 0x00FF0000,
GREEN = 0x0000FF00,
BLUE = 0x000000FF
};
void PrintColor(enum Color color)
{
switch(color)
{
case RED:
printf("Color: RED (0x%08x)\n", color);
break;
case GREEN:
printf("Color: GREEN (0x%08x)\n", color);
break;
case BLUE:
printf("Color: BLUE (0x%08x)\n", color);
break;
default:
printf("Color: ERROR");
break;
}
}
void InitArray(int* arr)
{
for(int i=0; i<ARRAY_SIZE; i++)
{
arr[i] = i + 1;
}
}
void PrintArray(int* arr)
{
for(int i=0; i<ARRAY_SIZE; i++)
{
printf("%d\n", arr[i]);
}
}
int main()
{
int array[ARRAY_SIZE] = {0};
enum Color green = GREEN;
InitArray(array);
PrintArray(array);
PrintColor(green);
return 0;
}
输出结果:
1
2
3
4
5
6
7
8
9
10
Color: GREEN (0x0000ff00)
4. sizeof
关键字的用法
-
sizeof
是编译器的内置指示符 -
sizeof
用于计算类型或变量所占的内存大小 -
sizeof
的值在编译器就已经确定 -
sizeof
的用法:
用于类型sizeof(type)
用于变量sizeof(var)
orsizeof var
#include <stdio.h>
int main()
{
int i = 0;
printf("%d\n", sizeof(int));
printf("%d\n", sizeof(i));
printf("%d\n", sizeof i);
return 0;
}
5. sizeof
的本质
-
sizeof
是C语言的内置关键字而不是函数 - 在编译过程中所有的
sizeof
将被具体的数值所替换 - 程序的执行过程与
sizeof
没有任何关系
#include <stdio.h>
int main()
{
int var = 0;
int size = sizeof(++var); // sizeof为C语言关键字,不是函数,在编译期间sizeof将被具体的值所提换,因此在编译期间 数值4将替换sizeof(++var),语句++var不会执行
printf("var = %d, size = %d\n", var, size);
return 0;
}
输出结果:
var = 0, size = 4
6. typedef
的意义
-
typedef
用于给一个已经存在的数据类型重命名 -
typedef
本质上不能产生新的类型 -
typedef
重命名的类型:
可以在typedef
语句之后定义
不能被unsigned
和signed
修饰 -
typedef
的用法:typedef type new_name;
#include <stdio.h>
typedef int INT32;
struct _tag_point
{
int x;
int y;
};
typedef struct _tag_point Point;
typedef struct
{
int len;
int array[];
} SoftArray;
typedef struct _tag_list_node ListNode;
struct _tag_list_node
{
ListNode* next;
};
int main()
{
INT32 i = 100; // int
// unsigned INT32 ui = 1; // 由typedef重命名的变量不能被unsigned修饰
Point p; // struct _tag_point
SoftArray* sa = NULL; // struct
ListNode* node = NULL; // struct _tag_list_node
return 0;
}
7. 小结
-
enum
用于定义离散值类型 -
enum
定义的值是真正意义上的常量 -
sizeof
是编译器的内置指示符 -
sizeof
不参与程序的执行过程 -
typedef
用于给类型重命名,重命名的类型可以在typedef
语句之后定义
声明:此文章为本人在学习狄泰软件学院《C语言深度解析》所做的笔记,文章中包含狄泰软件资料内容一切版权归狄泰软件所有!