一、结构体的补充
1、结构体的存储:
对于不同数据类型
结构体的存储需要满足内存对齐:
1.存放结构体成员变量,必须保证前面的长度为成员变量所占空间大小的整数倍
2.结构体整体的大小必须为最大类型长度的整数倍
2、结构体传参:根据需求的不同用值传递和地址传递
3.结构体数组
操作形式与步骤和数组相同
二、共用体(联合体)
应用场景:测试一个硬件平台是大端平台?小端平台?
1.小端:内存低地址存放低数据位称为内存小端
2.大端:内存低地址存放高数据位称为内存大端
例如:
#include <stdio.h>
union s
{
char a;
int b;
};
int main(void)
{
union s s1;
s1.b = 1;
if (s1.a)
{
printf("小端!\n");
}
else
{
printf("大端!\n");
}
return 0;
}
三、枚举
1、枚举类型:
1.枚举常量第一个值默认为0,后面的枚举常量为前一个枚举常量的值+1
2.枚举类型对应的变量的值应该为枚举常量中的值之一
3.枚举常量可以让代码提高可读性
四、位运算
& 按位与 & 0得0
| 按位或 & 0得0
^ 按位异或 相同为0 相异为1
~ 按位取反
<< 左移 让数据增大 num *= 2 ^ n
>> 右移 让数据缩小 num /= 2 ^ n
功能示例:
不改变其余位的前提下,让第n位置1
int num: 1110 1011
num = num | (1 << n);
不改变其余位的前提下,让第n位置0
int num:1110 1011
num = num & (~(1 << n));
^实现两个数的交换
#include <stdio.h>
int main(void)
{
int a = 100;
int b = 200;
a = a ^ b;
b = a ^ b;
a = a ^ b;
printf("a = %d, b = %d\n", a, b);
return 0;
}
在实现这些功能的时候需要了解运算符优先级:
括号 > 单目 > 双目 > 三目 > 赋值 > 逗号
在双目运算符中:
算数 > 移位 > 关系 > 位运算 > 逻辑