结构体,联合体,枚举

1|0结构体

  1. 结构体是不同类型的值的集合,用struct关键字声明,我们可以用这个定义好的结构体创建多个学生对象,并且可以初始化他们各自的成员信息。最后我们通过.操作符访问成员的相应属性。
#include <stdio.h> // 定义一个学生类型的结构体 struct Stu { // 学生姓名 char name[20]; // 学生年龄 int age; // 学生性别 char gender[6]; }; int main(void) { // 学生s1 struct Stu s1 = {"张三", 18, "男"}; // 学生s2 struct Stu s2 = {"李四", 20, "女"}; // 学生s3 struct Stu s3 = {"王五", 22, "保密"}; //打印学生信息 printf("第一个学生的信息: %s %d %s\n第二个学生的信息: %s %d %s\n第三个学生的信息: %s %d %s\n", s1.name, s1.age, s1.gender,s2.name, s2.age, s2.gender,s3.name, s3.age, s3.gender); return 0; }

image

注意:我们可以用typedef关键字对结构体变量进行重命。
2. 上面我们定义了一个结构体变量,当然我们也可以定义一个结构体指针,区别是结构体指针访问成员的属性的方式不同,用的是->操作符。

#include <stdio.h> // 定义一个学生类型的结构体 struct Stu { // 学生姓名 char name[10]; // 学生年龄 int age; // 学生性别 char gender[6]; int main(void) { struct Stu* s; s = (struct Stu*)malloc(sizeof(struct Stu)); strcpy(s->name,"小明"); s->age = 22; strcpy(s->gender,"男"); return 0; }
  1. 结构体内还可以嵌套结构体
#include <stdio.h> // 定义一个学生类型的结构体 struct Stu { // 学生姓名 char name[10]; // 学生年龄 int age; // 学生性别 char gender[6]; // 定义一个人的类型的结构体 struct Person { // 家庭地址 char addr[20]; // 联系电话 char tele[12]; struct Stu s1; }; int main(void) { struct Person p = {"四川省成都市","13988775544",{"小慧", 23, "女"}}; printf("家庭地址:%s 电话:%s 姓名:%s 年龄:%d 性别:%s\n", p.addr, p.tele, p.s1.name,p.s1.age,p.s1.gender); return 0; }
  1. 关于计算结构体的大小(结构体的内存对齐)
#include <stdio.h> struct S { char c; double d; int i; }; int main(void) { printf("%ld\n", sizeof(struct S)); return 0; }

image
首先字符c就在开始位置占一个字节,然后看double d我当前操作系统的默认对齐数是8,double也是八个字节,所以对齐数是8,它必须是地址的整数倍,所以double从偏移量为8的位置开始占位8个字节,int i4个字节,与默认对齐数8比较较小值是4,所以i从偏移量为16处开始占位四个字节。到现在已经占有20个字节了,还有最后一条规则就是结构体的总大小是每个成员中的最大对齐数那个数的整数倍,当前结构体中的最大对齐数就是8,20不是8的整数倍,所以还要往后占用四个字节大小空间直到总大小为24个字节才是8的整数倍。
image
image

2|0联合体

声明联合体的关键字是union,联合体里面的成员共用一块内存空间,且在同一时间这块内存空间只能被一个成员使用。
在联合体中,可以应用在判断当前操作系统是大端存储还是小端存储。利用的原理就是所有成员共用一块内存空间。

#include <stdio.h> union U { char c; int i; }u; int main(void) { u.i = 1; if(1 == u.c) printf("小端\n"); else printf("大端\n"); return 0; }

image

3|0枚举

那些可以列举且有限的常量可以用枚举的形式存储起来使用,关键字enum

#include <stdio.h> // 三原色 enum Color { RED, GREEN, BLUE }; int main(void) { printf("%d\n", RED); printf("%d\n", GREEN); printf("%d\n", BLUE); return 0; }

__EOF__

本文作者若达萨罗
本文链接https://www.cnblogs.com/bcc0729/p/17574096.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   若达萨罗  阅读(33)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
点击右上角即可分享
微信分享提示