今天我们来学习共用体。
共用体/联合体(和结构体相似)
一般情况下,共用体的大小至少是其最大成员变量所占用的字节数,同时还需要是其最大对齐要求的倍数。例如,若共用体中最大的成员变量是 double 类型(通常占 8 字节),且系统要求 8 字节对齐,那么该共用体的大小就是 8 字节。但如果共用体中存在一些特殊的成员类型,如数组或结构体等,情况可能会更复杂一些,需要综合考虑这些成员内部的对齐情况以及整个共用体的对齐要求来确定最终的大小。不过在较为简单的情况下,对于基本数据类型成员的共用体,可以近似认为其内存大小就是最大成员变量类型所占用的字节数并满足对齐要求。
结构体和共用体(联合体)的区别原理图就在这
补充一点:共用体注意数据的覆盖
要特别注意共用体的值覆盖问题
共用体开发案例
这边加getchar的意义在 getchar() 函数的一个常见用途是吸收输入缓冲区中的换行符。当使用 scanf 以 %c 格式读取字符时,用户输入字符后按下回车键,回车键产生的换行符 '\n' 会留在输入缓冲区里。如果后续还有读取字符的操作,这个换行符就可能被当作有效输入读取,从而影响程序的正常逻辑。
scanf("%c",&(p1[i].zhiye)); //为什么要加&而下边的不用加&
//是因为p1[i].zhiye是字符变量不是字符数组
//取决于你的结构体是怎么定义的
p1[i].zhiye=='t' 字符可以这样比较,字符串不行字符串要用strcmp函数
字符类型(char)本质上是一种整数类型,它用于存储单个字符的 ASCII 码值。当你使用 == 运算符比较两个字符时,实际上是在比较它们对应的 ASCII 码值。如果这两个字符相同,那么它们的 ASCII 码值也相同,== 比较的结果就为真(非零值);反之则为假(零值)。
后面复盘了一下
自己写了一个简单版本的
当然复习一下,掌握了原理就好
这个union后面写不写都无所谓,因为不用这个
比如union data{int data;char class} 这个data写不写无所谓的 因为调用的时候是用不上的,后面的mes才是主角