计算机萌新的成长历程——初识C语言19

大家好,很高兴能和大家再次相遇。今天我们要分享探讨的内容是初识C语言的末尾——结构体,希望经过咱们本篇的探讨之后,各位朋友能对这个知识点有更进一步的理解。废话不多说,咱们直接开始吧。

结构体

一、什么是结构体?

我对结构体是这么理解的——我为了向计算机描述一个比较复杂的对象,我会把这个对象的特点一一枚举出来,比如我要向计算机描述一为美女,那我就要跟计算机说一下这个美女的特征——性别:女、身高:168cm、体重:50kg、年龄:20岁……由这些信息成员所组成的对这位美女的描述的整体就是咱们所说的结构体。计算机在接受到这些信息后,它会将它存储起来,等到我需要这位美女的相关信息的时候,它会将这些信息从这个结构体当中提取出来。这里我要问一下各位了,你们说结构体是计算机中像库函数、关键字这样本身就存在的吗?答案显然易见,这个结构体是我们自己创造的,它也属于一种数据类型,在这个数据类型里包含了能够描述一个比较复杂的对象的各种信息。

二、怎么创建结构体?

这里我们要提到一个关键字struct——结构体关键字,我们需要通过这个关键字来进行对结构体的创建、引用等一些操作。

怎么来使用这个关键字呢?这里我举几个例子,比如我要描述一本书的书名、价格,我要描述一个人的身高、体重等我们可以这样操作:

代码语言:javascript
复制
//描述一本书;
struct book//struct——结构体关键字,我们通过struct创建了struct book这个类型;
{
	char name[20];//5元如何用7天
	short price;//5
};//这里的分号不可缺少,它是用来结束这个类型定义的
//描述一个人;
struct people
{
	short height;//185
	short weight;//75
	short age;//23
};

这里我们可以总结以下通过struct创建结构体的结构:

代码语言:javascript
复制
struct 类型名
{
	成员1类型 成员1名称;
	成员2类型 成员2名称;
	成员3类型 成员3名称;
	……;
	成员n类型 成员n名称;
};

三、如何使用结构体?

在main函数中,我们通过定义变量的方式来使用创建的结构体类型,这里我们拿刚刚创建的书的结构体来举例:

代码语言:javascript
复制
#define _CRT_SECURE_NO_WARNINGS 1

#include<stdio.h>
#include<string.h>

//描述一本书;
struct book//struct——结构体关键字,我们通过struct创建了struct book这个类型;
{
char name[20];//5元如何用7天
short price;//5
};//这里的分号不可缺少,它是用来结束这个类型定义的

int main()
{
//通过struct book这个结构体类型,创建一个该类型的结构体变量
struct book A = { "5元如何用7天",5 };//struct book——类型名,A——结构体变量名;
//"5元如何用7天"——成员1的值,5——成员2的值;
printf("书名:%s\n", A.name);//.——结构体成员操作符,使用格式:结构体变量.成员
printf("价格:%d元\n", A.price);
return 0;
}

下面我们来打印一下,看看能不能把书名和价格给打印出来:

计算机萌新的成长历程——初识C语言19_结构体指针

这里我们对结构体做个小结:

1.在main函数外,我们通过struct来创建一个结构体类型,类型里包括成员的类型与对应名称;

2.在main函数内,我们通过创建变量的方式来创建一个该类型的结构体变量;

3.结构体变量的值用大括号括起来,值的顺序对应结构体变量里成员的顺序;

4.我们想引用对应的结构体成员时通过操作符"."来进行引用,引用格式是:结构体变量+“.”+成员。

大家还记不记得咱们上一篇的内容?没错是指针的内容,那现在对于结构体我可不可以用指针的知识来进行展示呢?答案是当然可以。

上面我们提到了我们在main函数里创建的是一个结构体变量,那它既然是变量的话它肯定有自己的地址呀,下面我们尝试着把它的地址给打印出来:

计算机萌新的成长历程——初识C语言19_结构体指针_02

那如果我们将它的地址给存放起来,又应该怎么做呢?在上一篇的内容里我们知道了存放地址的格式,下面我们对着格式来操作一遍:

代码语言:javascript
复制
struct book* p = &A;//struct book*——指针变量的类型;
//p——指针变量;

这边我们已经把地址给存放好了,下面我们来打印一下看有没有存放成功:

计算机萌新的成长历程——初识C语言19_操作符_03

大家可以看到,我们不仅把地址存放成功了,我们还成功的利用指针变量将咱们结构体的两位成员给打印出来了。但是,接下来我要介绍的是前面遗漏掉的最后一个操作符“->”——结构体成员操作符。这里可能就有朋友有疑问了,你前面说“.”是结构体成员操作符,怎么这里“->”又是结构体成员操作符呢?别着急,我来给你介绍一下这两个操作符的区别:

代码语言:javascript
复制
// 结构体成员操作符操作对象;
// "."——操作对象是结构体变量和结构体成员
// "->"——操作对象是指针变量和结构体成员
// 结构体成员操作符使用格式;
// "."——结构体变量.结构体成员;
// "->"——指针变量->结构体成员;

下面我们来实际操作一下,通过指针变量来打印书名和价格;

计算机萌新的成长历程——初识C语言19_操作符_04

成功的将书名和内容给打印出来了,这里有一点需要大家知道,在结构体中,指针变量又叫做结构体指针,拿到咱们的例子中就是指针变量p是结构体变量A的结构体指针,操作符"->"使用时用文字转述出来就是指针指向成员,那咱们的例子来说明就是:

代码语言:javascript
复制
p->name;//结构体指针p指向结构体成员name;
p->prince;//结构体指针p指向结构体成员price;
//注:我们在使用数组成员的时候与使用变量成员稍有区别,这个知识点我会在后续的学习中接触到后分享给各位。

下面我们做个小结:

1.结构体变量同咱们的全局变量、局部变量一样,在计算机中都是拥有自己的地址,并且这个地址能被取地址操作符给提取出来并存储起来;

2.存储结构体变量地址的变量叫做指针变量,也叫做结构体指针;

3.我们可以通过*——解引用操作符来将存储在结构体指针中的地址提取出来并进行使用;

4.我们可以通过“->”——结构体成员操作符,来将结构体指针直接指向结构体成员并进行使用。

咱们今天的分享到这里就结束了,经过咱们本篇的探讨,希望对各位朋友在结构体和指针的学习上有帮助,截止到今天,咱们初识C语言的内容历经了18天,共计19个篇章在此终于完结了,在这期间的过程中,我自己对内容的学习感觉还是挺不错的,接来下我将进入分支与循环的学习,我也将同步分享我在学习过程中的感受,感谢各位这段时间的陪伴和支持,咱们下一个篇章见。