一丶共用体
概念:
不同类型的成员变量共用同一块地址空间
格式:
union 共用体名
{成员列表;};
特性:
1) 共用体成员共用同一块地址空间
2) 赋值顺序以最后一次赋值为准
3) 共用体的大小为成员中类型最大的数据的大小
#include <stdio.h>
union val
{
int a;
char ch;
};
int main(int argc, char const *argv[])
{
union val v;
v.a = 10;
v.ch = 'a';// 他俩不能同时出现,是以最后一次赋值为准
printf("%d\n", v.a);//后面ch的赋值会覆盖前面a的赋值,所以这里v.a为字符a的ascii码值97
return 0;
}
二丶共用体
1. 定义:
用户自定义数据类型,可以用于声明一组常数
2. 格式:
enum 枚举名
{value1,
value2,
value3,
...};
(未赋初值时,第一个常数会默认为0,后面常数依次加一(如果第一个值被设置为1,则默认从1开始递增))
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
enum work
{
D1 = 1,
D2 = 2,
D3 = 3
};
int main()
{
int num;
scanf("%d",&num);
if (num==D1)
{
printf("工作第一天\n");
}
return 0;
}
三丶存储类型
auto static extern register
1. auto // 自动型
修饰变量,一般省略的时候会认为是auto类型
2. static: // 静态型
修饰变量和函数
修饰局部变量
1) 变量的存放位置在全局区(静态区),如果静态变量有初值,存放在数据.data段,没有初始化存放在.bss段
2) 生命周期为整个程序
3) 限制作用域:
修饰局部变量:和普通局部变量的作用域没有区别,但是生命周期被延长了
修饰全局变量:限制在本文件中使用
4) 只初始化一次,初值赋值0
修饰函数
static修饰函数,限制在本文件中使用
#include <stdio.h>
void fun()
{
static int a = 0;
a++;
printf("%d\n", a);
}
int main(int argc, char const *argv[])
{
int b;
printf("%d\n", b);
fun(); // 1
fun(); // 2
return 0;
}
3. extern //外部引用
通过extern可以引用其他文件中的全局变量或函数
4. register //寄存器类型
由于寄存器数量比较少,申请不到空间时和auto一样