“C语言之美:结构体、联合体和枚举的魔法“

news/2025/2/5 13:49:28/

目录

结构体

联合体

枚举


结构体

  • 结构体是一种用户定义的数据类型,它允许我们将不同类型的数据组合在一起,形成一个单独的实体。
  • 结构体由多个元素(也称为成员)组成,并且每个元素可以是不同的数据类型,例如整数、浮点型、字符等等。
  • 结构体的声明使用关键字 struct,并且通常定义在函数外部。

来看一个简单的例子:

#include <stdio.h> struct Student
{    char name[50];int age; float height; 
}; int main(){  struct Student s;strcpy(s.name, "Tom");s.age = 18; s.height = 1.75;printf("Name: %s\n", s.name); printf("Age: %d\n", s.age);printf("Height: %f\n", s.height); return 0; 
}

在上面的代码中,我们定义了一个名为 Student 的结构体,它由三个元素组成:姓名、年龄和身高。在主函数中,我们创建了一个 Student 类型的变量 s,并将其成员初始化为一些值。最后,我们使用 printf() 函数打印了这些值。

联合体

  • 联合体是另一种用户定义的数据类型,它与结构体类似,但只能同时保存其中一个成员。
  • 联合体的声明使用关键字 union,并且通常也定义在函数外部。

例子如下:

#include <stdio.h> union Number 
{     int integer;float decimal;}; int main() 
{    union Number n; n.integer = 10; printf("Integer: %d\n", n.integer); n.decimal = 3.14; printf("Decimal: %f\n", n.decimal);printf("Integer: %d\n", n.integer); return 0; 
}

在上面的代码中,我们定义了一个名为 Number 的联合体,它由两个成员组成:整数和浮点数。在主函数中,我们创建了一个 Number 类型的变量 n,并将其整数成员初始化为 10。之后,我们将其浮点数成员初始化为 3.14,并打印了两个成员的值。请注意,当我们更改一个成员的值时,其他成员的值也会相应地改变。

枚举

  • 枚举是一种用户定义的数据类型,它允许我们将一组具有相关性的命名值分配给一个类型。
  • 枚举的声明使用关键字 enum,并且通常定义在函数外部。

老规矩,上代码:

#include <stdio.h>enum Weekday{ Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday }; int main(){    enum Weekday today; today = Wednesday; printf("Today is %d\n", today); return 0;}

在上面的代码中,我们定义了一个名为 Weekday 的枚举类型,它由七个值组成:星期一到星期日。在主函数中,我们创建了一个 Weekday 类型的变量 today,并将其赋值为星期三。最后,我们使用 printf() 函数打印了 today 的值。

希望这篇博客能够帮助初学者理解结构体、联合体和枚举的概念以及如何在 C 语言程序中使用它们。如有不足之处,欢迎在评论区指出~


http://www.ppmy.cn/news/47404.html

相关文章

ServletConfig和ServletContext 的介绍和代码实现

目录 ServletConfig ServletConfig 基本介绍 ServletConfig 类能干什么 为什么需要 ServletContext 1. 方案 1-DB 2. 方案 2-ServletCntext 代码实战 ServletContext ServletContext 基本介绍 ServletContext 可以做什么 代码实战 代码实战2 ServletConfig Servle…

netlink

Netlink套接字是用以实现内核进程和用户进程通信的一种特殊的进程间通信&#xff08;IPC&#xff09;&#xff0c;从linux 2.2开始引入内核&#xff0c;当时名为AF_NETLINK,旨在提供一种更灵活的内核和用户空间的通信方法&#xff0c;用以替换笨拙的IOCTL. IOCTL 方式通信&…

dockerFile记录

后端打包dockerFile内容 FROM openjdk:8-alpine RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime RUN echo Asia/Shanghai > /etc/timezone ENV projectName operation RUN mkdir -p /home/${projectName} WORKDIR /home/${projectName} COPY ./ /home/${pro…

「OceanBase 4.1 体验」|国产分布式数据库不好用?别再打脸了

文章目录 分布式数据库分布式数据库有哪些&#xff1f;OceanBase4.1安装部署Index Skip Scan总结 随着互联网的高速发展和数据量的爆炸式增长&#xff0c;如何能够高效、可靠、安全地存储海量数据成为了每个企业的重要课题。 分布式数据库 分布式数据库通常是由多个独立的数据…

从底层理解类

函数调用约定_thiscall thiscall是对象调用类成员函数时的约定 class Role { public:int hp;int mp;int add(int a, int b){return hp mp a b;} }; int main() {Role r;r.add(100, 200); } 查看汇编代码 15: Role r;16: r.add(100, 200); 00F91B08 push 0C…

[网络安全]第三次作业

目录 1. 什么是IDS&#xff1f; 2. IDS和防火墙有什么不同&#xff1f; 3. IDS工作原理&#xff1f; 4. IDS的主要检测方法有哪些详细说明&#xff1f; 5. IDS的部署方式有哪些&#xff1f; 6. IDS的签名是什么意思&#xff1f;签名过滤器有什么作用&#xff1f;例外签名…

记录解决Maven依赖冲突导致的NoSuchMethodError问题的过程

摘要 本文记录了解决 Maven 依赖冲突导致的 NoSuchMethodError 问题的过程。问题出现的原因是多个库包含了 Jackson 库&#xff0c;导致 Jackson 序列化与反序列化时出现 NoSuchMethodError 异常。通过查看依赖树&#xff0c;排除冲突库的方法&#xff0c;最终成功解决了该问题…

查询练习:YEAR 与 NOW 函数

查询 student 表中每个学生的姓名和年龄。 -- 使用函数 YEAR(NOW()) 计算出当前年份&#xff0c;减去出生年份后得出年龄。 SELECT name, YEAR(NOW()) - YEAR(birthday) as age FROM student; ----------------- | name | age | ----------------- | 曾华 | 42 |…