第11课-enum-sizeoftypedef分析

35次阅读

共计 1918 个字符,预计需要花费 5 分钟才能阅读完成。

枚举类型的使用方法
·enum 是 C 语言中的一种自定义类型
·enum 值是可以根据需要自定义的整型值
·第一个定义的 enum 值默认为 0
·默认的情况下 enum 值是在前一个定义值得基础上加 1
·enum 类型的变量只能去定义时的离散值
·enum 中定义的值是 C 语言中真正意义上的常量
·在工程中 enum 多用于定义整型常量

补充:
“0x%08x”
0x 为普通字符,输出的时候会原样输出为 0x。
%08x 为整型以 16 进制方式输出的格式字符串,会把后续对应参数的整型数字,以 16 进制输出。08 的含义为,输出的 16 进制值占 8 位,不足部分左侧补 0。

enum 的使用 例子 11-1:

include “stdio.h”

enum
{

ARRAY_SIZE = 10

};
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 = Blue;
int array[ARRAY_SIZE] = {0};
printcolor(c);
InitArray(array);
PrintArray(array);
return 0;

}
输出结果:
Color: Blue(0x000000FF)
1
2
3
4
5
6
7
8
9
10

sizeof 关键字的用法
·sizeof 是编译器的内置指示符
·sizeof 用于计算类型或变量所占的内存大小
·sizeof 的值在编译期就已经确定

·sizeof 是 C 语言的内置关键字而不是函数
——在编译过程中所有的 sizeof 将被具体的数值所替换
——程序的执行过程与 sizeof 没有任何关系

sizeof 的本质 11-2.c

sizeof 不是函数不会因为程序的运行而运行,而是在编译的过程中就已经被具体的数值所替换,var++ 在程序里面得不到执行。

include “stdio.h”

int f()
{

printf("zhangyingli\n");
return 0;

}
int main()
{

int var = 0;
int size = sizeof(var ++);
printf("var = %d,size = %d\n",var,size);
size = sizeof(f());      // 返回 int 类型的变量值
printf("size = %d\n",size);

}
输出结果:
var = 0,size = 4
size = 4

typedef 的意义
·typedef 用于给一个已经存在的数据类型重命名
·typedef 本质上不能产生新的类型
·typedef 重命名的类型
——可以在 typedef 语句之后定义
——不能被 unsigned 和 signed 修饰

include “stdio.h”

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
struct _tag_list_node
{

ListNode *next;           
// 编译器也会认为 ListNode 就相当于 struct _tag_list_node

};
int main()
{

 int32 i = -100;
 //unsigned int32 ii = 0;  //error
 Point p;
 SoftArray *sa = NULL;
 ListNode *node = NULL;
 return 0;

}
小结:
·enum 用于定义离散型类型
·enum 定义的值是真正意义上的常量
·sizeof 是编译器的内置指示符
·sizeof 不参与程序的执行过程
·typedef 用于给类型重命名
- 重命名的类型可以在 typedef 语句之后定义
狄泰课堂笔记

正文完
 0