第11课 enum sizeof,typedef分析

枚举类型的使用方法
·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语句之后定义
狄泰课堂笔记

你可能感兴趣的:(c)