const
const的不同用法:
在C语言中,const
关键字用于声明一个常量。它可以用来修饰变量、指针等,表示该变量或指针的值是不可修改的。下面是一些常见的const
的使用方式:
1.修饰普通变量:
const int a = 10; // 声明一个整型常量a,值为10
2.修饰指针变量(指向常量的指针):
const int *p = &a; // 声明一个指向整型常量的指针p,指向变量a的地址
3.修饰指针变量(常量指针)
int * const p = &a; // 声明一个整型常指针p,指向变量a的地址,指针本身的值不可修改
4.修饰指针变量(指向常量的常指针):
const int * const p = &a; // 声明一个指向整型常量的常指针p,指向变量a的地址,指针本身的值和指向的值都不可修改
结构体的大小:
结构体的大小是由其成员变量的大小和内存对齐规则决定的。每个成员变量在内存中的起始地址必须是其类型大小的整数倍,这样可以提高访问效率。因此,结构体的总大小可能会比所有成员变量的大小之和要大,这是因为可能存在内存对齐产生的填充字节。
结构体的对齐问题(内存对齐)
共用体:
共用体是一种数据结构,它允许多个不同类型的成员变量共享同一块内存空间。共用体的大小等于其最大成员变量的大小。共用体的作用有两个主要方面:节省空间和实现数据的转换。
Union (联合体)
共用体作用:
1.节省空间 –嵌入式开发环境(资源有限)
2.实现数据的转换
语法:
Union 标识符
{
Int a;
Char b;
}:
注意:
1.花括号后有分号
2.公用初始化时,只能给一个值,默认给到第一个元素
3.各个成员起始位置相同,但是根据类型不同,能拿到的字节数不同。
4. 共用体可以赋值
最终共用体中的值取决于最后一次给到的值,以及最后一次能影响到的字节数。
考点:
判断大小端?
用公用体写一个函数判断大小端 int isLittleEndian(void)
方便类型转换
枚举
枚举是一种特殊的数据类型,它由一组命名的常量组成。如果在定义枚举时,里面的常量不赋值的话,就会默认从0开始赋值。枚举类型本质上是通过整型实现的,因此枚举类型与整型之间是通用的。使用枚举可以提高代码的可读性,并具有语法检查更严格的好处。
枚举的用法:
如果在定义枚举时,里面的常量不赋值的话,就会默认从0开始赋值。
没给的值默认从0开始递增,赋值后从赋值处开始从所赋的值递增。
枚举类型 本质上 是通过int类型实现的 ---整型的数据 --- 枚举类型于整型之间通用
枚举好处:
- 提高代码可读性。
- 有了类型,语法检查更严格
位运算
01 –二进制数据
0
1 –一位数据
位运算 – 指的是对二进制位上的数据进行运算
运算:
1.& ---按位与运算 ---运算规则:一假则假。
例子:a = 0x 33 ; a&0x55
0011 0011
0101 0101 = 0001 0001 // 11
2.| ---按位或运算 ---运算规则:一真则真。
3.~ ---按位取反 ---运算规则:真假相对。
4.^ ---异或 ---运算规则:不同则真,同则假。
5.<< 左移 a<<2 a左移两位 a = 1111 1111 <<两位后a = 1111 1100
6.>> 右移
用途:
- 控制某些二进制位 控制硬件。
练习:1.将a = 0xffff ffff的偶数位清零, 将b = 0x5555 5555的奇数位置1。
右移:
操作数1>>操作数2
操作数1 向右移 操作数2 这么多位
逻辑右移:
操作数1 是无符号数 高位补0
算术右移
操作数1 是有符号数 高位补1
练习:将a=1221,判断a中有几个1。