C语言 --- 枚举、位运算

(一)枚举

1.概念:枚举是指将变量的值一一列举出来,变量的值只限于列举出来的值的范围

2.作用:a.提高代码可读性;b.提高代码的安全性

3.枚举类型:

enum 枚举名

{

        列举各种值   //枚举元素或枚举常量

};

注意:列举各种值之间用逗号隔开,不需要写类型名。

eg:

enum fire

{

        LITTLE_FIRE,

        MIDDLE_FIRE,

        LARGE_FIRE,  //这个逗号加不加都没什么影响

};

注意:
(1)表示定义了一个枚举类型。

(2)枚举中逐个列举的值,默认是从0开始的。如果有给定的值,则后续没有给值的枚举成员依次加1

(3)枚举类型是基本类型,本质上是一个 int 类型 的数据。

(4)枚举类型的变量与整型变量是通用的。

(5)与宏定义对比:

①使用阶段不同:a.宏定义---预处理阶段;b.枚举---编译阶段要检查语法,运行阶段要

参与代码运行。

②可读性:都提高了可读性,枚举更能说明有相关性的一些值间关系。

(二)typedef

type define 本意不是定义类型,而是给类型起别名

eg:

(1)int a;  //定义了一个int型变量a

         typedef int a;  //此时a 是int 类型的一个别名

(2)struct stu 

        {

        };

        struct stu s;

        typedef struct stu stu_t;

        stu_t s;

(三)位运算

位运算是可以直接操作二进制位

注意:浮点数不能做位运算

&:位运算中的与运算。 一假则假      //清0

eg:

0xaa

1010  1010

0011   0011  &

-----------------------

0010   0010             ----->0x22

|:或运算,一真则真        //置1

eg:

0xaa

1010  1010

0011   0011  |

-----------------------

1011   1011             ----->0xbb

~:取反,真假相对
^:异或

相同位0,不同为1    ①加密 ②实现两个数的交换

eg:

1010   1010

 0011   0011  ^

------------------------

 1001   1001          ------->0x99

a = a^b;

b = a^b;

a = a^b;

<<:左移

a<<n       //表示将 a 这个数据左移 n 位,左移1位相当于乘2

注:  最低位补0

>>:右移

a>>n       //表示将 a 这个数据右移 n 位,右移1位相当于除以2

注:  

(1)算术右移:看符合位,看数据类型

如果是有符号类型的数据,右移时,最高位补符号位;

如果是无符号类型的数据,右移时,最高位补0。

(2)逻辑右移:不管数据的符号,直接在左边补 0。

(四)补充

1.函数指针

(1)函数指针是指向函数的指针变量。它存储了函数的入口地址,通过函数指针可以调用所指向的函数。

(2)声明形式:  返回值类型 (*指针变量名)(参数列表) 

(3)函数指针的主要用途包括实现函数回调、动态选择要执行的函数、提高代码的灵活性和可扩展性等。

2.指针函数

(1)指针函数是指返回值为指针类型的函数。

(2)声明形式:返回值类型 *函数名(参数列表)

(3)例如,一个指针函数可能返回一个指向动态分配内存的地址,或者返回一个指向数组的首地址等。

3.堆的空间

堆是动态内存分配区域,程序可以在运行时根据需要手动请求和释放堆内存。

void *malloc (size_t size);

(1)功能:在堆上开辟出一块连续的空间

(2)参数: size   ------   表示申请的空间的大小,单位字节

(3)返回值:成功----返回申请到的内存空间的地址; 失败----返回NULL

void free(void *ptr);

(1)功能:释放之前申请的堆上的空间

(2)参数:ptr  是之前申请到的堆上的空间的地址

(3)free释放后的空间:①一般不再使用;②指向这块空间的指针是个野指针;③free 之后对应的空间上的内容也不要使用。

注意:

a.这两个函数是成对出现的。

b.free 只是释放了空间,但这个空间上的数据不会被清零

c.不要在一个函数中多次使用free函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值