【C语言】学数据结构前必学的结构体struct详细

这篇具有很好参考价值的文章主要介绍了【C语言】学数据结构前必学的结构体struct详细。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【C语言】学数据结构前必学的结构体struct详细

佛祖说,他可以满足程序猿一个愿望。程序猿许愿有生之年写出一个没有bug的程序,然后他得到了永生。


目录

1、结构体的声明与定义

1.1结构体是什么?

1.2为什么要有结构?

1.3结构体的声明

1.4结构体成员类型

1.5结构体变量定义和初始化

2、结构体成员的访问

3、结构体传参


前言:

大家好,我是拳击哥,今天我给大家带来的学数据结构前必学的结构体。本期讲解初始化结构体,如何访问结构体成员以及结构体的传值调用和传址调用。下面我就来讲解它们的用法。


1、结构体的声明与定义

1.1结构体是什么?

什么是结构,我们在学习数组的时候知道了数组是一组相同类型元素的集合,那么数组就是一个结构。而结构体的结构是一些不同类型数据的集合,这些数据称为成员变量。结构的每个成员可以不同类型的变量。


1.2为什么要有结构?

我们生活有很多复杂对象,比如一个人、一本书。一个人他由有姓名,性别,年龄,工资,籍贯来描述。一本书它由书名、作者、出版社、价格来描述。因此这些描述组成复杂对象就是结构。好了说了那么多,如何用代码的形式描述这些复杂对象?请往下看。


1.3结构体的声明

struct stu
{
	type member1;
	type member2;
	type member3;
	...;
}variavle-list;

上述代码中struct是结构体的类型,stu是标签名根据需求起的一个名称。type是结构体类型member是结构体成员我们可以看到可以有N个成员根据你需求来决定有多少个成员变量。

那么{}里面的所有的成员我们成为member-list也就是成员列表,variable-list是变量列表。有了以上概念的理解,1.2中说到了一个人有姓名,性别,年龄,工资,籍贯。假设要描述一个学生如何做呢,我们来看代码:

#include<stdio.h>

struct Person
{
	//以下五个是结体成员
	char name[10];
	int age;
	char sex[5];
	float salary;
	char place[10];
}s4,s5;//声明的同时定义s4,s5
int main()
{
	struct Person s1, s2, s3;//s1-s3是结构体变量(局部的)
	return 0;
}

main函数上方的struct Person以及{}里面的内容都是结构体的声明,声明了结构体成员的类型以及大小。{}后面定义的s3,s4是全局的结构体变量。main函数里面定义的s1,s2,s3这三个是局部结构体变量。只有创建了这五个变量,才会在内存中开辟五块块空间。这五个结构体变量里面存的就是刚刚结构体声明里面的五个结构体成员。

【C语言】学数据结构前必学的结构体struct详细


1.4结构体成员类型

那么结构体的是一组不同类型的数组的集合,结构体的成员可以是变量、数组、指针、甚至是棋类结构体。下面我们用代码来讲解。


1.5结构体变量定义和初始化

1.3中我们定了5个结构体变量,我们看到有三种定义方式。这些定义都是有了结构体类型,才能进行定义的。实际上有三种定义方式:

  • 声明类型的同时,在;前面定义全局的结构体变量
  • 单独定义结构体变量
  • main函数里面定义局部的结构体变量

我们来看一组代码:

#include<stdio.h>

struct Person
{
	//以下五个是结体成员
	char name[10];
	int age;
	char sex[5];
	float salary;
	char place[10];
}s4,s5;//声明的同时定义s4,s5

struct Person s6;

int main()
{
	struct Person s1, s2, s3;//s1-s3是结构体变量(局部的)
	return 0;
}

以上代码中,s4,s5属于声明结构体类型的同时在;前面定义全局的结构体变量

s6属于单独定义的结构体变量;s1-s2属于在main函数里面定义局部的结构体变量。

相信大家都已经理解了结构体变量的定义,下面我们来看结构体变量的初始化。


初始化结构体变量。跟数组初始化类似,只不过。结构体变量里面的值可以为不同类型,如以下程序:

#include<stdio.h>

struct Person
{
	char name[10];
	int age;
	char sex[5];
	float salary;
	char place[10];
};

int main()
{
	struct Person s1 = { "张三",22,"男",12.3f,"美国" };
	struct Person s2 = { "李四",23,"女",66.2f,"荷兰" };
	struct Person s3 = { "王五",66,"保密",0.2f,"布吉岛" };
	printf("%s %d %s %.1f %s\n", s1.name, s1.age, s1.sex, s1.salary, s1.place);
	printf("%s %d %s %.1f %s\n", s2.name, s2.age, s2.sex, s2.salary, s2.place);
	printf("%s %d %s %.1f %s\n", s3.name, s3.age, s3.sex, s3.salary, s3.place);
	return 0;
}

输出结果

张三 22 男 12.3 美国
李四 23 女 66.2 荷兰
王五 66 保密 0.2 布吉岛

当我们想访问结构体成员时,我们用结构体变量 号结构体成员来获取。注意,你初始化什么类型格式符就写什么类型比如"张三"对应的格式符为%s,相信大家已经知道怎样初始化结构体变量了。

总结:

  • 结构体成员类型可以是不同的类型,普通数据类型,数组,指针,甚至是结构体
  • 结构体体变量初始化时,对应着结构体成员类型来初始化
  • 结构体变量访问结构体成员时用.操作符来访问
  • 输出每个结构体成员时应该对应该类型的格式符

最后我们来看一下当结构体成员是结构体时是什么样子:

#include<stdio.h>

struct S1
{
	int a;
	char b;
};
struct S2
{
	float c;
	struct S1 f;
	double d;
};
int main()
{
	struct S2 s = { 2.1f,{10,'A'},3.4 };
	printf("%.1f %d %c %.1lf\n", s.c, s.f.a, s.f.b, s.d);
	return 0;
}

 输出结果:2.1 10 A 3.4

structS2中定义了结构体类型为结构体,有些像套娃。下面我来讲解它们的用法:

结构体类型为结构体的结构体成员时初始化只需要在{}里面再加一个{}就好了,{}里面就可以初始化该成员为结构体里面的结构体成员。

结构体变量访问为结构体成员为结构体的结构体成员里面的结构体成员需要用到两个.号 。如上方程序,两个点号来获取。结构体类型为结构体里面的成员。


2、结构体成员的访问

结构体成员的访问相信大家在上面的讲解中已经了解到了一个方法那就通过.号来访问,还有一个方法是通过->来访问。这两个访问方法为:

  • .操作符
  • ->符号
#include<stdio.h>

struct Person
{
	char name[10];
	int age;
	char sex[5];
};

void Print1(struct Person* p)
{
	printf("%s %d %s\n", (*p).name, (*p).age, (*p).sex);
	printf("%s %d %s\n", p->name, p->age, p->sex);
}

int main()
{
	struct Person s = { "张三",60,"男" };
	Print1(&s);
	return 0;
}

输出结果

张三 60 男
张三 60 男

以上代码是把结构体变量s的地址传给了指针结构体变量p。那么我们就可以通过解引用p再访问结构体成员,访问方式就是.号。->号权限比较大可以不用解引用直接访问成员。

【C语言】学数据结构前必学的结构体struct详细


 3、结构体传参

在我们学习数组的时候,数组的参数有传值和传参两中传参方式。结构体也是一样,既能传参又能传址。有以下代码:

#include<stdio.h>

struct Person
{
	char name[10];
	int age;
	char sex[5];
};

void Print1(struct Person p1)
{
	printf("%s %d %s\n", p1.name, p1.age, p1.sex);
}

void Print2(struct Person* p2)
{ 
    printf("%s %d %s\n", (*p2).name, (*p2).age, (*p2).sex);
	printf("%s %d %s\n", p2->name, p2->age, p2->sex);
}

int main()
{
	struct Person s = { "张三",60,"男" };
	Print1(s);
	Print2(&s);
	return 0;
}

输出结果

张三 60 男
张三 60 男

张三 60 男

Print1形参里面传过去的就是值,此时p1等同于s。依次通过.号来访问成员变量就好了。

Print2形参里面传过去的就是地址,此时p1的地址等同于s的地址,我们需要先对p1进行解引用才来依次访问成员变量。我们也可以用->直接访问成员变量。

【C语言】学数据结构前必学的结构体struct详细


 

本期博客到这里就结束了,相信大家对初识结构体有了新的认识,感谢您的观看。

【C语言】学数据结构前必学的结构体struct详细

 Never Give Up文章来源地址https://www.toymoban.com/news/detail-512569.html

到了这里,关于【C语言】学数据结构前必学的结构体struct详细的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【C语言】struct结构体

    具有相同或不同类型元素的集合叫做结构体。定义一个结构体,本质是在制作一个类型: 在C中,结构体内只能存放各种类型的变量,不能存函数: 像上面这样就是声明了一个结构体 struct Student ,此时的 struct Student 相当于一个类型名。 然后我们可以用这个自己声明的结构体

    2024年02月03日
    浏览(59)
  • 【Linux技术专题】「夯实基本功系列」带你一同学习和实践操作Linux服务器必学的Shell指令(排查问题指令 - 上)

    在线上排查问题时,查询日志、查看系统配置和分析操作系统信息是至关重要的。这些操作可以帮助我们深入了解软件和服务的兼容性,并解决潜在的问题。在本次学习中,我们将介绍并深入学习一些我在处理类似问题时常用的指令。通过掌握这些指令,你将能够更加高效地

    2024年01月16日
    浏览(59)
  • Go语言入门6(struct 结构体)

    ​结构体是一种聚合的数据类型,是由零个或多个任意类型的值聚合成的实体。每个值称为结构体的成员 type + 结构体名 + struct + {成员列表} ​⭐如果结构体成员名字是以大写字母开头的,那么该成员就是导出的。这是Go语言导出规则决 定的。一个结构体可能同时包含导出和

    2023年04月12日
    浏览(42)
  • 【go语言基础】结构体struct

    主要是敲代码,敲的过程中会慢慢体会。 结构体是用户定义的类型,表示若干字段的集合,目的是将数据整合在一起。 简单的说,类似Java中的实体类。存储某个实体属性的集合。 注意:结构体名字,结构体属性名的首字母大写代表其余的包可以访问该结构体,类似Java中的

    2024年02月13日
    浏览(60)
  • Go语言结构体struct详解,Go空结构体的这些妙用你知道吗?

    本文详解了Go语言结构体的各个知识点,最后介绍了空结构体的3种妙用。希望对你有帮助。 结构体,是一种自定义的数据类型,由多个数据类型组合而成。用于描述一类事物相关属性 。 定义方式 : 结构体和结构体指针,两者的实例化有所区别 提供多种写法,灵活使用:

    2024年02月01日
    浏览(47)
  • 【数据结构】C语言结构体详解

    目录 前言 一、结构体的定义 二、定义结构体变量 三、结构体变量的初始化 四、使用typedef声明新数据类型名 五、指向结构体变量的指针 总结 🌈嗨!我是Filotimo__🌈。很高兴与大家相识,希望我的博客能对你有所帮助。 💡本文由Filotimo__✍️原创,首发于CSDN📚。 📣如需转

    2024年02月04日
    浏览(49)
  • 『初阶数据结构 • C语言』① - 数据结构为何重要

    本文内容借鉴一本我非常喜欢的书——《数据结构与算法图解》。学习之余,我决定把这本书精彩的部分摘录出来与大家分享。 数组是计算机科学中最基本的数据结构之一。如果你用过数组,那么应该知道它就是一个含有 数据的列表。它有多种用途,适用于各种场景,下面

    2024年02月16日
    浏览(47)
  • 【运维知识大神篇】运维人必学的Docker教程1(Docker安装部署+Docker镜像管理+容器管理常用命令+搭建docker的本地yum源+windows系统安装docker环境)

    本篇文章开始给大家介绍Docker,这个是我非常喜欢的一个服务,介绍给大家,希望大家也能喜欢! 目录 何为容器 Docker环境安装部署 一、yum安装(CentOS7.9) 二、rpm包安装(CentOS) 三、卸载docker环境 四、安装指定的docker版本 五、Ubuntu安装docker环境 六、使用deb安装docker 七、

    2024年01月18日
    浏览(110)
  • R语言数据结构(三)数据框

    数据结构是指在计算机中存储和组织数据的方式,不同的数据结构有不同的特点和适用场景。R语言中的常用数据结构,包括向量、矩阵、数组、列表和数据框。关于数据结构的使用,我们将分四篇文章分别介绍每种数据结构的操作方法和代码示例。 为方便大家理解记忆,对

    2024年01月15日
    浏览(39)
  • 【C语言】【数据结构】自定义类型:结构体

    这是一篇对结构体的详细介绍,这篇文章对结构体声明、结构体的自引用、结构体的初始化、结构体的内存分布和对齐规则、库函数offsetof、以及进行内存对齐的原因、如何修改默认对齐数、结构体传参进行介绍和说明。                  ✨  猪巴戒 :个人主页✨      

    2024年02月05日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包