1.共用体:
union //联合--共用体
早期的时候,计算机的硬件资源有限,
能不能让多个成员变量 公用同一块空间
//使用方式 类似 结构体 --- 也是构造类型
struct 结构体名
{
成员变量名
};
union 共用体名
{
成员变量名
}; //表示构造了一个共用体类型
//定义变量
//定义指针
//定义数组
//做函数形参
//做函数返回值类型
注意:
1.共用体类型的大小 = 最大的成员的大小
2.共用体初始化,只能写一个值,这个值是给第一个成员变量的值
3.共用体成员的访问方式 和 结构体一样
4.共用体因为公用同一块空间
赋值时,后赋值的会影响前面赋值的结果
5.用途
a.节省空间
校园人员管理系统
struct student
{
char name[20];
int sno;
float score;
};
struct teacher
{
char name[20];
int tno;
float salary;
};
struct member
{
char name[20];
int no;
union
{
float salary;
float score;
}data;
};
struct member s;
printf("score = %f\n",s.data.score);
struct member t;
printf("score = %f\n",s.data.salary);
b.数据转换
192.168.0.59 //ip地址 --- 网络环境中 ---实际对应是一个32位的数值
#include <stdio.h>
union Ip
{
unsigned char ip[4];
unsigned int iip;
};
int main(int argc, const char *argv[])
{
union Ip d = {192,168,0,59};
printf("ip = %#x\n",d.iip);
return 0;
}
判断大小端
2.枚举
枚举 --- 将变量的可能值(常量值) 一一列举出来
将有关联的常量值,一一列举出来,组合成一个枚举类型
enum 枚举名
{
枚举值
//sun,mon,tue,wed,thu,fri,sat
};
//构造了一个枚举类型
注意:
1.枚举类型 本质是 用int型数据表示的
枚举类型 设计的不严谨的地方
如果一个变量只有几种可能的值,则可以定义为枚举类型。
所谓"枚举"是指将变量的值一一列举出来,变量的值只限于列举出来的值的范围内。
枚举 --- 提高代码可读性
3.
typedef //type define
表示给已有类型起别名
struct stu
{
};
struct stu s;
union demo
{
};
union demo d;
typedef struct stu s; //s是struct stu 这个类型的别名
s s1; //定义了一个 struct stu的变量
typedef void (*sighandler_t)(int);
sighandler_t signal(int signum, sighandler_t handler);
void (*signal(int signum, void (*handler)(int) ))(int) ;
typedef int array_t[4]; //一维数组
array_t b[3]; //array_t => int[4]
4.
位运算:
指的是二进制位上的运算
用途:
嵌入式 --- 位运算 非常普遍
操作硬件
c语言位运算:
& 与
| 或
^ 异或
~ 取反
<< 左移
>> 右移
& 与
运算规则: 一假则假
| 或
运算规则: 一真则真
^ 异或
运算规则: 相同为0 不同为1
<< 左移 a<<n
运算规则: 将 左操作数a 左移 n位
左移一位 相当于 结果乘以2
右移:
要看 要移动的数据的类型
看是有符号 --- 最高位补符号位 //算术右移
无符号 --- 最高位补0 //逻辑右移