目录
枚举
typedef
位运算
堆上的空间
枚举
一个一个列举出来,是指将变量的值一一列举出来,变量的值只限于列举出来的值的范围内。
作用:
1、为了提高代码的可读性
2、提高代码的安全性
枚举类型
基本语法:
enum 枚举名
{
列举各种值
};
示例代码:
enum fire{LITTLE_FIRE,MIDDILE_FIRE,LARGE_FIRE, //最后一个变量的逗号可以省略
};
注:
1、表示定义了一种枚举类型
2、枚举中逐个列举的值,默认是从 0 开始的
如果有给定的值,后续没有给值的变量依次加1
3、枚举类型的本质实际是int 类型数组
4、枚举的变量与整型类型的变量通用
5、与宏定义对比
区别:
①使用阶段不同:
宏定义:预处理阶段
枚举:编译阶段,要检查语法;运行阶段,参与代码的运行
②可读性
两者都提高了可读性,但枚举更能说明相关性的一些值间关系
typedef
typedef ----> typedef define 本意不是定义类型,给已有的类型起别名,提高代码可读性
typedef int INT;
INT a = 10; //此时定义的的是一个int型的整型变量,赋值10
说明:
(1) typedef 可以声明各种类型名,但不能用来定义变量。
位运算
可以直接操作二进制位 ---> 控制硬件;操作系统某些文件信息存储,通常也是用位来描述的
& 与运算 ---> 一假则假 //常用于清0
| 或运算 ---> 一真则真
~ 取反 ---> 真假相对
^ 异或 ---> 相同为0,不同为1 //可实现数据加密,数据交换
<< 左移 ---> a<<n 表示将 a 这个数据左移 n 位 注:最低位补 0
>> 右移 ---> a>>n 表示将 a 这个数据右移 n 位
算术右移:看符号位和数据类型
如果是有符号类型的数据,右移时,最高位补的是符号位
如果是无符号类型的数据,右移时,最高位补 0
注意:浮点数不能做位运算
例:定义两个整型变量,分别赋值3、5,以二进制进行位运算的过程和结果:
使用位运算实现数据左移循环:
#include<stdio.h>int main(int argc, const char *argv[])
{int a = 0xcd;int i = 0;for(i = 0;i < 1;++i){if(a & 0x80000000){a = a<<1;a = a+1;}else{a = a << 1;}}printf("%#x\n",a);return 0;
}
运行结果:
0x19a
堆上的空间
void *malloc(size_t size);
功能:在堆上开辟一块空间
参数:size 表示申请的空间大小,单个字节
返回值:
成功返回申请到内存空间的地址
失败返回NULL
void free(void *ptr);
功能:释放之前申请的堆上的空间
参数:ptr 一定是之前申请到堆上的空间的地址
free 释放后的空间:
1、一般不再使用
2、指向这块空间的指针是野指针
3、free 之后对应空间上的内容也不要使用
注意:
1、malloc 和free 成对出现
2、free 只是释放了空间,但是在这块空间上的数据并不会清零。
3、不能多次free
#include<stdio.h>
#include<stdlib.h> //函数头文件int main(int argc, const char *argv[])
{int a[5];int i = 0;int *p = malloc(sizeof(int)*5); //明确要开辟的堆上空间大小for(i = 0;i<5;++i){scanf("%d",p+i); //向数组中输入数据值}printf("-------------\n");for(i = 0;i < 5;++i){printf("%d ",*(p+i));}puts('\n');free(p); //释放申请的堆上的空间return 0;
}