IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> C语言,结构体 -> 正文阅读

[数据结构与算法]C语言,结构体

一月二十七日记录。

先前所介绍的都是基本类型,如int,还有构造类型,如数组。

但是在某些情况下,基本类型不能满足我们的需求。此时,我们可以将一些有关的变量组织起来,并定义成一个结构,以此来表示一个有机的整体或一种新的类型。然后程序就可以像处理内部的基本数据那样,对结构进行操作。

结构体类型的概念与声明

结构体是一种构造类型,它是由若干成员组成的。这些成员可以是一个基本数据类型,如char,也可以是一个构造类型,如数组。

正如结构体的类型一样,在使用它之前我们需要对其进行构造,这个操作称为声明一个结构体。

struct 结构体类型名

{

? ? ? ? 成员列表;? ? ? ? //变量名

};? ? ? ? //这里有个分号

关键字struct表示声明结构,其后的结构体名代表该结构的类型名,大括号中的变量构成结构的成员。

结构体变量的定义

关键字struct构造了一个新的类型结构,然后我们要使用这个结构,这时候就要定义变量。

定义结构体变量的方式有三种:

1、先声明结构体类型,后再定义变量。

struct 结构体类型名

{

? ? ? ? 成员列表;

};

struct 结构体类型名 结构体变量名;? ? ? ? //这里的struct可省略。

2、声明结构体类型名同时定义变量。

struct 结构体名

{

? ? ? ? 成员列表;

}变量名列表;

3、直接定义结构体变量(无声明)。

struct

{

? ? ? ? 成员列表;

}变量名列表;

需要注意的是:

1、结构体的类型与变量是两个概念。变量可以赋值,类型不行。如:可以用int类型定义一个a变量,然后对a赋值,但是不可以对int赋值。在编译时,对类型不分配内存空间,只对变量分配内存空间。

2、结构体成员也可以是结构体类型的变量。(嵌套)

3、使用第一个方式定义变量时,定义时的struct可省略不写。

struct Project

{

? ? ? ? int long;

? ? ? ? int weight;

};

struct Project_v

{

? ? ? ? int a;

? ? ? ? int b;

? ? ? ? struct Project Project1;

}Final;

上述代码先声明了一个Project和Project_v的结构体类型,并定义了一个结构体变量Final。然后在第二个结构体类型中有一个成员是第一个结构体类型。

结构体变量的引用

当我们定义一个结构体变量后,就可以对其进行引用。但我们不能针对一个结构体的整体进行操作,而应该是针对其成员进行操作。

引用的时候我们使用了结构体变量名后加上一个成员运算符“ . ”和成员名字,然后就能对该结构体中的该成员进行操作。

结构体变量名.成员名

Project1.Name = “LLeavee”;

Project1.Age = 18;

如果结构体的成员也属于一个结构体类型,在引用时就要使用若干个成员运算符,一级一级地找到最低一级的成员,并且我们只能对最低级的成员进行操作。

结构体变量名.成员结构体变量名.成员名

Project1.Name.first = "LLeavee";

Project1.Name.second = "leave";

注意:成员运算符的优先级最高。

当我们需要使用引用地址时,结构体变量和结构体成员的地址都可以进行引用。

scanf("%d", &Project1.Age);

printf("%o", &Project1);

结构体的初始化

结构体类型与其他基本类型一样,可以在定义结构体变量时指定初始值。

struct Student

{

? ? ? ? char Name[20];

? ? ? ? char Sex[5];

? ? ? ? int Age;

} stdent1 = {"LLeavee","Boy","18"};

struct Student student2 = {“leave”,"Girl",19};

这样就可以快速初始化一个结构体变量。

结构体数组

定义一个结构体数组的方式与定义结构体变量的方式相同,只是结构体变量换成数组而已。

struct Students

{

? ? ? ? char Name[20];

? ? ? ? int Age;

} student[3];

结构体数组的初始化

类比于“结构体的初始化”。

struct Students

{

? ? ? ? char Name[20];

? ? ? ? int Age;

} student[3] = {{“Alan”,17},{"John",21},{"Alice",19}};

结构体指针

一个指向变量的指针表示的是该变量所占内存的起始地址。如果一个指针指向结构体变量,那么该指针指向的就是该结构体变量的起始地址。同样,结构体指针变量也可以指向结构体数组中的元素。

基于先前的Students结构体类型:

结构体类型 *指针名;

Student *pStruct;

在引用时需要加括号,否则会先计算点运算符后计算“ * ”,因为成员运算符优先级特别高。

pStruct = &Student1;

(*pStruct).Name = "LLeavee";

指针引用结构体变量成员也可以用指向运算符"->"

pStruct -> Name = "LLeavee";

综上:在引用结构体变量的成员时,我们有三种方式:

student1.Name = "LLeavee";

(*pStruct).Name = "LLeavee";

pStruct -> Name = "LLeavee";

指向结构体数组的指针

使用时并无大异。

基于先前的Students结构体类型:

Students * pStruct;

pStruct = &student[2];

结构体作为函数参数

函数是由参数的,可以将结构体变量的值作为一个函数的参数。

使用结构体作为函数的参数有三种方式:

1、使用结构体变量作为函数参数

2、使用指向结构体变量的指针作为函数参数

3、使用结构体变量的成员作为函数参数

todo

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-01-28 12:10:13  更:2022-01-28 12:11:00 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 19:43:47-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码