? ?
活动地址:CSDN21天学习挑战赛
学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。各位小伙伴,如果您: 想系统/深入学习某技术知识点… 一个人摸索学习很难坚持,想组团高效学习… 想写博客但无从下手,急需写作干货注入能量… 热爱写作,愿意让自己成为更好的人… … 欢迎参与CSDN学习挑战赛,成为更好的自己,请参考活动中各位优质专栏博主的免费高质量专栏资源(这部分优质资源是活动限时免费开放喔~),按照自身的学习领域和学习进度学习并记录自己的学习过程。您可以从以下3个方面任选其一着手(不强制),或者按照自己的理解发布专栏学习作品,参考如下:
前言
任何事物的存在皆有其不可被代替的意义,那么在C和C++中结构体存在的意义是什么呢?
(一)为什么要用结构?
在C和C++中可以用数组存储许多相同类型和意义的相关信息,然而,有一些信息是由若干个不同的数据类型和不同意义的数据所组成,数组显然不能满足编写程序的需求,为了解决这个难题,结构应运而生。举个栗子:把身份证看作是一个结构,在这个结构中包含姓名、年龄、籍贯等信息。只要拿出这个身份证就可以确定一个人的身份,也可以在这个身份证上获取某个信息,当然了,要确保这个身份证是他的。【滑稽】
(二)定义一个结构体
@标准的定义方法
需要用到关键词 struct 语句结构如下:
struct Student
{
int age;
char name[20];
char tele_number[11];
};
@常用的定义方法
在此之前需要一个小小的插曲: 关键词typedef的使用:
typedef int INT;
int a = 0;
INT a = 0;
通过typedef这个关键词,把结构体定义成下面这样:(我最喜欢的方式)
typedef struct
{
int age;
char name[20];
char tele_number[11];
} Student, *pStudent;
通过上面的代码段,我们定义了一个名为Student的结构体和Student类型的指针pStudent。 抛开事实,可以把上面的代码段理解为如下的语句:
struct Student
{
int age;
char name[20];
char tele_number[11];
};
typedef Student * pStudent;
但是这个写法有一个弊端, 不能进行嵌套定义(什么是嵌套定义后面再说)。
(三)访问及赋值操作
不能进行访问和赋值操作的数据结构是不合格的,结构体也不例外。 结构体中成员变量的访问操作符是:. 没错就是点。
Student stu;
int ageee = stu.age;
pStudent pStu = &stu;
int ageee = pStu->age;
接下来是赋值:
Student stu = {20, “Wang”, "18545669661"};
Student stu;
stu.age = 20;
stu.name = "Wang";
stu.tele_number = "18545669661";
Student stu2 = stu;
你可能会想:为什么电话号码要用char类型的数组而不用int型的数组呢? 你可以试试,我相信你试过之后会喜欢char的。
(四)嵌套定义
什么是嵌套定义呢?和递归很像,递归是在函数内部调用该函数,嵌套定义是在该结构体中定义一个该结构体类型的成员指针。 举例:
struct Student
{
int age;
char name[20];
char tele_number[11];
Student* stu;
};
嵌套定义是链表的常客。比如一个存储int数据的链表,它的结构体应该是: 记得我在结构体的定义处说的typedef来定义的弊端吗,就在这里。这里最好用标准的定义方式。
struct list
{
int data;
list* pList;
}
这样我们可以通过一些语句达到如下的效果:(链表操作不细说)
|