目录
枚举:
定义:“枚举”是指将变量的值一个一个列举出来,变量的值只限于列举出来的值的范围。
作用:
1.为了提高代码可读性
2.提高代码安全性
枚举类型:
enum 枚举名
{
列举各种值,//注意用逗号隔开不是分号
};
eg:
enum fire
{
large_fire,//没有赋值其默认值为0
mid_fire,//其值默认在上一个原基础上+1 = ‘1’
small_dire,
};
enum fire
{
large_fire = 8,//赋值为8
mid_fire,//其值默认在上一个原基础上+1 = ‘9’
small_dire,//10
};
注意:
表示定义了一个枚举类型,枚举中逐个列举的值,默认时以0开始的。
如果有给定的值,则后续没给值的枚举成员是上一个成员逐个加1.
枚举类型的使用:
1.使用成员变量:
枚举类型不需要声明就可以使用其成员变量(一般将其定义在全局区域里方便系统识别),其成员变量名在代码之中指的是其对应的在定义枚举类型是赋的值。
eg:
按上方最近一个例子来说
printf("%d",large_fire);
其打印值为8
2.使用类型定义变量:
当使用该类型定义变量时,其类型相当于一个int型的值,任何int型的操作都可以实现。
枚举类型的变量与整形类型的变量通用。
eg:
enum fire s;
s = 1;
printf("sizeof(s) = %d,a = %d",sizeof(s),s);
以上打印结果为4,1;
与宏定义的区别:
使用阶段不同:
宏定义—— 预处理阶段。
枚举——编译阶段要检查语法,执行阶段参与代码运行。
可读性:
都为了提高代码可读性,枚举更能说明有相关性的一些值间关系。
typedef:
定义:
本意不是定义类型,而是给类型起别名。
int s;
typedef int a;//此时a是int的一种别名,而不是变量
int s 等价 a s;
对于结构体的使用:
typedef struct student S_stu;
则定义struct student 类型是就可以用S_student代替。
eg:
S_student a: == struct student a;
位运算(c语言特点):
与:
符号:&
规则:一假则假
或:
符号:|
规则:一真则真
非:
符号:~
规则:真假相对
异或:
符号:^
规则:相同为假,不同为真
左移:
符号:<<
规则:表示将一个数据按位进行左移,左移一位相当于乘2.,其中最低位补0
写法:
a<<n;//表示将一个数按位左移n位
右移:
符号:>>
规则:表示将一个数据按位进行右移,右移一位相当于除2.
补零方式划分为:
1.算数右移:如果是有符号位,则右移是按符号位的值来进行高位补充
2.逻辑右移:如果是无符号位,则右移是按补0来进行高位补充
写法:
a<<n;//表示将一个数按位左移n位
应用:
1.加密数据
2.交换数据
注意:浮点数不能进行位运算。
指针函数:
char *strcpy (char *dest,const char *pc)
函数指针与指针函数的区别:
函数指针:指的是指向函数的指针//基类型是函数类型的指针
指针函数:返回值为指针类型的函数。
堆空间操作函数:
堆空间申请:
定义:申请一块堆上的空间,系统运行时就不会使用该空间来进行数据操作
void *malloc(size_t size);//size_t size 指的是所要申请的空间字节数。
堆空间释放函数:
定义:释放堆上申请的空间,系统运行时就可以使用该空间来进行数据操作
void free(void *ptr);//void *ptr指的是所要释放空间的地址
//*ptr一定是之前申请到堆上空间的地址
注意:
1.free释放后的空间:
(1).一般不再使用。
(2).指向这块空间的指针——即野指针。
(3).free之后对应空间上的内容不一定被修改——但是也不要再使用。
2.空间操作函数特点:
1.malloc() 和free()成对出现。
2.free只是释放了空间,表示这一块空间又自由了,但是这块空间上数据并不会清零。
3. 不要多次free