c语言基础笔记DAY7_结构体共用体枚举
struct结构体
struct people
{
char name[128];
int age;
int height;
}a,b;
struct people c = {"Mike",28,178};
struct people d = {.age = 20}; //给部分成员初始化
- struct people是类型 , 没有申请内存空间 , 所以不能在定义时给成员变量赋值
d=c;
是可以的. 相同类型的变量可以赋值
共用体(联合体)
-
联合union是一个能在同一个存储空间存储不同类型数据的类型;
-
联合体所占的内存长度等于其最长成员的长度倍数,也有叫做共用体;
-
同一内存段可以用来存放几种不同类型的成员,但每一瞬时只有一种起作用;
-
共用体变量中起作用的成员是最后一次存放的成员,在存入一个新的成员后原有的成员的值会被覆盖;
-
共用体变量的地址和它的各成员的地址都是同一地址。
#include <stdio.h>
//共用体也叫联合体
union Test
{
unsigned char a;
unsigned int b;
unsigned short c;
};
int main()
{
//定义共用体变量
union Test tmp;
//1、所有成员的首地址是一样的
printf("%p, %p, %p\n", &(tmp.a), &(tmp.b), &(tmp.c));
//2、共用体大小为最大成员类型的大小
printf("%lu\n", sizeof(union Test));
//3、一个成员赋值,会影响另外的成员
//左边是高位,右边是低位
//低位放低地址,高位放高地址
tmp.b = 0x44332211;
printf("%x\n", tmp.a); //11
printf("%x\n", tmp.c); //2211
tmp.a = 0x00;
printf("short: %x\n", tmp.c); //2200
printf("int: %x\n", tmp.b); //44332200
return 0;
}
引申
大小端
小端: 低位存低地址内存
大端: 高位存低地址内存
- 大型服务器与网络数据 大端
- 小型的计算机 小端
枚举
- 枚举:将变量的值一一列举出来,变量的值只限于列举出来的值的范围内。
枚举类型定义:
enum 枚举名
{
枚举值表
};
-
在枚举值表中应列出所有可用值,也称为枚举元素。
-
枚举值是常量,不能在程序中用赋值语句再对它赋值。
-
举元素本身由系统定义了一个表示序号的数值从0开始顺序定义为0,1,2 …
#include <stdio.h>
enum weekday
{
sun = 2, mon, tue, wed, thu, fri, sat
} ;
enum bool
{
flase, true
};
int main()
{
enum weekday a, b, c;
a = sun;
b = mon;
c = tue;
*printf*("%d,%d,%d\n", a, b, c);
enum bool flag;
flag = true;
if (flag == 1)
{
*printf*("flag为真\n");
}
return 0;
}