结构体详解+代码展示

embedded/2024/11/29 5:59:19/

系列文章目录

🎈 🎈 我的CSDN主页:OTWOL的主页,欢迎!!!👋🏼👋🏼
🎉🎉我的C语言初阶合集:C语言初阶合集,希望能帮到你!!!😍 😍
🔍🔍我的C语言进阶合集:我的C语言进阶合集,期待你的点击!!!🌈🌈

文章目录

  • 系列文章目录
  • 前言
  • 一、结构体的定义
  • 二、结构体的语法
    • (2.1)定义结构体类型
    • (2.2)声明结构体变量
    • (2.3)初始化结构体变量
  • 三、结构体的使用
  • 四、注意事项
  • 五、代码展示
  • 总结
  • END


前言

大家好,今天我来给各位分享C语言中自定义类型——结构体(struct)
结构体允许我们将多个不同类型的数据组合成一个单一的数据类型,从而可以更方便地管理和操作这些数据。
我将从其定义、语法、使用,注意事项,最后用代码来展示结构体的具体使用。


一、结构体的定义

结构体是C语言中的一种用户自定义的数据类型,
它允许我们将不同类型的数据项组合在一起,形成一个复合数据类型。

二、结构体的语法

(2.1)定义结构体类型

struct 结构体名称 
{数据类型 成员变量1;数据类型 成员变量2;...数据类型 成员变量N;
};
  • 例如,定义一个表示学生信息的结构体类型:
struct Stu
{char name[20];int age;
};

(2.2)声明结构体变量

  • 在定义了结构体类型之后,我们可以声明该类型的变量。

单独声明:

struct Stu stu1;
struct Stu stu2;

在定义时直接声明:

struct Stu 
{char name[20];int age;
} stu1, stu2;

(2.3)初始化结构体变量

可以通过直接赋值或使用指定初始化器进行初始化。

直接赋值:

struct Stu stu1 = {"Alice", 20};

或者使用C99标准中的指定初始化器:

struct Stu stu1 = { .name = "Alice", .age = 20 };

三、结构体的使用

自定义类型结构体变量可以通过点操作符(.)来访问其成员。

#include <stdio.h>struct Stu 
{char name[20];int age;
};int main() 
{struct Stu stu1 = { "Alice", 20};// 访问和打印结构体成员printf("Name: %s\n", stu1.name);printf("Age: %d\n", stu1.age);return 0;
}

输出结果展示:

四、注意事项

1、结构体类型的命名:通常使用大写字母开头的驼峰命名法(如Stu)来命名结构体类型,以区分普通变量类型。

2、结构体变量的作用域:与普通变量一样,结构体变量的作用域由其声明位置决定。

3、内存对齐:编译器可能会为了优化访问速度而对结构体成员进行内存对齐,这可能会导致结构体实际占用的内存比成员变量总和大。

4、嵌套结构体:一个结构体可以包含另一个结构体作为成员。

  • 如:
struct Addr 
{char street[20];char city[20];
};struct Stu
{char name[20];int age;struct Addr addr;
};

5、结构体指针:可以通过指针来访问结构体成员,这在处理大型结构体或动态分配内存时非常有用

struct Stu* ps = &stu1;
printf("Name: %s\n", ps->name);

五、代码展示

代码示例:

  • 以下是一个完整的示例程序,展示了如何定义结构体、声明结构体变量、初始化结构体以及通过结构体指针访问成员。
#include <stdio.h>// 定义一个存储地址的结构体
struct Addr 
{char street[20];// 存储街道名称char city[20];	// 存储城市名称
};// 定义一个存储学生信息的结构体
struct Stu 
{char name[20];	 // 存储学生姓名int age;	  	 // 存储学生年龄struct Addr addr;// 嵌套的地址结构体
};int main() 
{// 初始化结构体变量 stu1// 初始化时也初始化嵌套的 addr结构体struct Stu stu1 = { "Alice", 20, {"1haoStreet", "beijing"} };// 访问和打印结构体 stu1 的成员 printf("Name:%s\n", stu1.name);				// 打印学生姓名printf("Age:%d\n", stu1.age);				// 打印学生年龄printf("street:%s\n", stu1.addr.street);	// 打印学生地址的街道printf("city:%s\n", stu1.addr.city);		// 打印学生地址的城市// 打印分隔线printf("----------------------------------------------------\n");// 使用结构体指针访问和打印成员struct Stu* ps = &stu1;					// 创建指向 stu1 的指针 psprintf("Name:%s\n", ps->name);			// 使用指针访问并打印学生姓名printf("Age:%d\n", ps->age);			// 使用指针访问并打印学生年龄printf("street:%s\n", ps->addr.street );// 使用指针访问并打印学生地址的街道printf("city:%s\n", ps->addr.city );	// 使用指针访问并打印学生地址的城市return 0;
}

输出结果展示:


总结

通过以上分享和示例,相信大家对C语言中的结构体有了更深入的理解。
结构体是C语言中非常强大和灵活的一种数据类型,能够帮助我们更好地组织和管理数据。

END

每天都在学习的路上!
On The Way Of Learning


http://www.ppmy.cn/embedded/141372.html

相关文章

书生大模型实战营第四期-入门岛-4. maas课程任务

书生大模型实战营第四期-入门岛-4. maas课程任务 任务一、模型下载 任务内容 使用Hugging Face平台、魔搭社区平台&#xff08;可选&#xff09;和魔乐社区平台&#xff08;可选&#xff09;下载文档中提到的模型&#xff08;至少需要下载config.json文件、model.safetensor…

Day28 贪心算法 part02

122.买卖股票的最佳时机II 本题解法很巧妙,本题大家可以先自己思考一下然后再看题解,会有惊喜! class Solution {public int maxProfit(int[] prices) {//分析每一天的情况。只要保证今天买,明天卖可以不亏钱,那就是最大的利润。把每一天可以赚钱的机会都不放过,先把能挣…

基于Matlab的变压器仿真模型的建模方法(7):单相三绕组变压器的空载合闸和负载运行瞬态分析

前言: 这里推出全网最详细、最全面的基于电机动态分析的Simulink仿真模型的建模方法、经验和技巧。本节从单相三绕组变压器的基本方程出发,导出相应的等效电路电路,并据此用Matlab/Simulink的SimPowerSystems模块库的电路元件构造了一个考虑铁心损耗和主磁路饱和因素的仿真模…

uniapp在H5使用vue-router路由返回上一页不会触发销毁函数解决方法

问题&#xff1a;uniapp在H5使用vue-router路由&#xff0c;如果在H5平台上进行页面刷新操作&#xff0c;再返回上一页&#xff0c;可能会遇到beforeDestroy、destroyed、onUnload生命周期钩子不被触发的问题。这是因为在H5中&#xff0c;页面的刷新实际上是整个应用的重新加载…

光学工程是不是劝退专业?

接触光学快十年&#xff0c;四年美国工业界经验&#xff0c;谈谈对光学的看法。 门槛高。学好光学需要很多基础&#xff1a;数学、物理、半导体、电磁场等等&#xff0c;大学毕业可能只是一知半解。光学的世界非常深非常广&#xff0c;即使学了十年也只懂某一特定领域的特定知…

Docker 容器隔离的关键技术:Namespace

Docker 容器隔离的关键技术&#xff1a;Namespace 在 Docker 容器中&#xff0c;Namespace 是 Linux 内核提供的一种隔离机制&#xff0c;用于实现资源的独立性和隔离性。简单来说&#xff0c;它让每个容器感觉自己是独立运行的&#xff0c;就像一台单独的计算机一样。 Names…

java 字符串反转 详解

在 Java 中&#xff0c;字符串反转可以通过多种方法实现&#xff0c;这里将介绍几种常见的方法来达到这一目的&#xff1a; 1. 使用 StringBuilder 或 StringBuffer 这是最简单也是最常见的方法。StringBuilder 和 StringBuffer 都有一个内置的方法 reverse()&#xff0c;可以…

Hive安装 保姆级安装教程

Hive安装 保姆级安装教程 1、内嵌模式 上传 压缩包 /opt/modules 解压&#xff1a; tar -zxvf apache-hive-3.1.2-bin.tar.gz -C /opt/installs/ 重命名&#xff1a; mv apache-hive-3.1.2-bin/ hive 配置环境变量&#xff1a;vi /etc/profileexport HIVE_HOME/opt/installs…