目录
共用体
编辑枚举
位运算
共用体
定义和访问都和结构体类似;区别在于共用体所有的成员变量共享同一片空间,内存空间就是其最大数据类型所占内存的大小;
如果给成员变量2的值,那么成员变量1的值就会被覆盖;主要适用于传参;
关键词:
union 共用体名
{
数据类型1 成员变量1;
数据类型2 成员变量2;
数据类型3 成员变量3;
...........
};
重点使用:判断硬件存储方式是大端还是小端,如下图二
内存小端:内存低地址存低数据位
内存高地址存高数据位
内存大端:内存低地址存高数据位
内存高地址存低数据位
通过将int *型首地址强制转换为char *从而打印出第一个地址从而判断其是大端还是小端,强制转化地址指针其存储内容不会改变
通过union判断大小端程序及图解如下通过共用体特性的判断
枚举
enum 枚举类型名
{
枚举常量1,
枚举常量2,
枚举常量3
.....
};
1,枚举一般说明将来变量的值在给定的常量中选择其一作为他的值
2,枚举常量可以被赋值,下一个常量的值就是这个常量的加1,第一个默认为0
3,枚举常量默认为int类型,可以直接在程序中使用
举例:
该举例中用int *的作用是:
当使用 scanf
函数从标准输入中读取数据时,它需要知道数据将被存储在内存的哪个位置。scanf
函数通过传递参数的内存地址来实现这一目的。
在C语言中,变量是存储在内存中的,每个变量都有一个地址。&
运算符用于获取变量的地址。例如,如果有一个整数变量 num
,&num
将给出 num
变量的地址。
但是,scanf
函数的参数必须是指向要存储数据的内存位置的指针,即某个数据类型的指针。例如,如果要读取一个整数值,scanf
需要一个 int*
类型的指针作为参数。
然而,在的代码中,s
是一个枚举类型的变量,而不是一个指针。因此,为了使 scanf
函数正常工作,需要使用 &
运算符获取 s
变量的地址,并将它强制转换为 int*
类型的指针。这样做可以将 s
变量的地址传递给 scanf
函数,让它知道在哪里存储输入的数据。
位运算
&按位与 与0得0;
| 按位或 或1置1;
^按位异或 相同为0,相异为1
~按位取反 每位取反
>>右移 右移n位,等价于让该数/2^n
<<左移 左移n位,等价于让该数*2^n
位运算在数据交换中的运用代码及其图解如下:
将变量得第n位置0或者是置1(单片机中常用)
置0: num = num & ~(1<<n);
置1:num = num | (1<<n);