[西门子] 从零开始学习C语言的结构体,带你掌握结构体的概念,类型,格式,用法和用途(一

[复制链接]
查看276 | 回复0 | 2024-6-28 08:00:22 | 显示全部楼层 |阅读模式
>点击蓝字,关注我们






指针是C语言的灵魂:一篇文章带你掌握指针的基本概念和用法
C语言的数组:跨越一个阶梯,如何用一种数据结构存储无限多的数据?

01
本节重点
C语言结构体



结构体的概念
结构体是C语言中一种复合数据类型,它可以将不同类型的数据组合成一个整体,称为结构体变量。结构体变量中的每个数据称为结构体成员,它们可以是基本数据类型,也可以是数组,指针,甚至是其他结构体类型。结构体可以用来表示一些复杂的数据结构,如学生信息,图书信息,链表,树等。
结构体的类型


结构体的类型由结构体名和结构体成员列表组成,使用关键字struct来定义。结构体名可以自由命名,但要避免与已有的变量名或类型名冲突。结构体成员列表由一对大括号包围,每个成员占一行,以分号结束。结构体类型的定义格式如下:

例如,定义一个表示学生信息的结构体类型,可以写成:
struct student
{
  char name[20]; //姓名
  int id; //学号
  int age; //年龄
  char gender; //性别
  float score; //成绩
};


结构体的格式


结构体的格式指的是结构体变量在内存中的存储方式。结构体变量的大小等于所有成员的大小之和,但是由于编译器的对齐规则,结构体变量的实际占用的空间可能会比这个值大一些。结构体变量的地址等于第一个成员的地址,结构体成员的地址按照它们在结构体中的顺序依次排列,每个成员的地址都是它的大小的整数倍。


例如,上面定义的student结构体类型,在32位系统中,每个成员的大小分别为20,4,4,1,4字节,如果按照它们的大小之和,那么结构体变量的大小应该是33字节,但是由于编译器的对齐规则,实际上结构体变量的大小是36字节,因为gender成员的地址要求是4的整数倍,所以在gender前面要补齐3个字节的空白,这样才能保证结构体成员的地址都是它的大小的整数倍。


结构体的用法


结构体的用法主要包括以下几个方面:
- 定义结构体变量
- 访问结构体成员
- 初始化结构体变量
- 复制结构体变量
- 传递结构体变量
- 指向结构体的指针


定义结构体变量


定义结构体变量有两种方式,一种是在定义结构体类型的同时定义变量,另一种是先定义结构体类型,再用结构体类型定义变量。两种方式的区别在于,前者只能定义一次,后者可以多次定义。定义结构体变量的格式如下:

例如,定义一个表示图书信息的结构体变量,可以写成:



















//方式一struct book {  char title[50]; //书名  char author[20]; //作者  float price; //价格} b1; //定义一个book类型的变量b1
//方式二struct book {  char title[50]; //书名  char author[20]; //作者  float price; //价格};struct book b2; //定义一个book类型的变量b2访问结构体成员


访问结构体成员的方法是使用点运算符(.),点运算符的左边是结构体变量的名字,右边是结构体成员的名字。访问结构体成员的格式如下:

通过这种方式,可以获取结构体成员的值,也可以给结构体成员赋值。例如,给b1和b2的成员赋值,并打印它们的值,可以写成:


























#include <stdio.h>#include <string.h> //引入字符串处理函数的头文件//定义结构体类型struct book{  char title[50]; //书名  char author[20]; //作者  float price; //价格};int main(){  struct book b1; //定义一个book类型的变量b1  struct book b2; //定义一个book类型的变量b2  //给结构体成员赋值  strcpy(b1.title, "C语言程序设计"); //用strcpy函数复制字符串  strcpy(b1.author, "谭浩强");  b1.price = 39.8f; //用单精度浮点数赋值  strcpy(b2.title, "数据结构与算法分析");  strcpy(b2.author, "Mark Allen Weiss");  b2.price = 49.9f;  //打印结构体成员的值  printf("b1的书名是%s,作者是%s,价格是%.2f元\n", b1.title, b1.author, b1.price);  printf("b2的书名是%s,作者是%s,价格是%.2f元\n", b2.title, b2.author, b2.price);  return 0;}测试程序:


(内容太多了,下节继续)




想要学习C语言的朋友可以自己购买下面推荐的c语言基础从入门到精通,内容包含c语言初始到最终实战,附赠视频教学,让你轻松学习C语言。


点赞加关注,学习不迷路
微信公众号|工控小新
EPLAN电气绘图、TIA博图基础 、CAD、C语言教学、单片机基础、三菱PLC ... 每日持续更新中


发现“分享”“赞”了吗,戳我看看吧




免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册哦

x
您需要登录后才可以回帖 登录 | 注册哦

本版积分规则