对于自定义结构体/枚举/联合(共同体)上课知识点的小小记录。
2024/02/27
- 匿名结构体类型
一般情况下只能用一次,因为在创建匿名结构体的时候就要创建变量了。还有一点需要注意的是,尽管匿名结构体里member-list是完全一样的,匿名结构体的指针是不能获取匿名结构体变量的地址的。
typedef匿名结构体是可行的 - Struct如何初始化,结构体初始化时,遇到数组成员时,需要使用{}
- 结构体内存对齐
#include <stddef.h>
offsetof(); 可以计算结构体成员相较于结构体起始位置的偏移量 - 修改默认对齐数
#pragma pack() //取消默认对齐数修改,还原为默认
#pragma pack(8) //默认对齐数改为8
#pragma pach(1) //默认对齐数改为1 - 位段
数据包在网络上传输时候会用到位段 - 枚举常量
枚举常量变量赋值时候,只能用枚举常量来赋值,用其他的类型,比如int来赋值,c语言可能不会报错,但是c++(类型检测比较严格)就会报错 - 联合(共用体)
union Uh1
{
char c[5]; 占用大小5,对齐数按成员的来计算,那就是1
int i; 对齐数为4
}; 最大元素的大小不是int i的整数倍,所以该联合体占用空间为8
如何计算该联合体的大小 - 如何实现通讯录
1. test.c contact.c contact.h
2. 通讯录包含内容: 名字,年龄,性别,电话,地址
3. 通讯录功能: add, del, search, modify, show, sort, exit
4. #define MAX 100, MAX_NAME, MAX_SEX, MAX_TELE, MAX_ADDR
struct PepInfo, struct Contact
InitContact();
AddContact();
ShowContact(); printf(“%-20s\t”, ) 标题也要打印
DelContact(); pc->data[i] = pc->data[i + 1]; //这是可以实现的,结构体变量虽然存放的是多个变量,struct变量a和b是可以互相赋值的
FindByName();
SearchContact();
ModifyContact();