- 算法训练营:海量图解+竞赛刷题(入门篇)
- 陈小玉
- 659字
- 2021-07-23 18:16:30
1.8 信息携带者:定义一个结构体
在程序设计中,经常需要将多个数据项组合在一起作为一个数据元素。例如,一个学生的信息包括姓名、学号、性别、年龄、分数等。此时可以将学生的信息定义为结构体类型。
![](https://epubservercos.yuewen.com/41CA5A/20637464308667306/epubprivate/OEBPS/Images/039-2.jpg?sign=1739400081-3ppC8NGuYnICSRN2uCZuPTDs2sPbFf9N-0-9c1e6acf20124373c2a8ed54772bf81d)
训练1-35:输入一个学生的信息(包括姓名、学号、性别、年龄、分数)并输出。
![](https://epubservercos.yuewen.com/41CA5A/20637464308667306/epubprivate/OEBPS/Images/039-3.jpg?sign=1739400081-Ook9QdkYZbfZpeBmdJVVC9XbXvxKWooD-0-4a1d8ac16cac166409d2edc1c60f5231)
![](https://epubservercos.yuewen.com/41CA5A/20637464308667306/epubprivate/OEBPS/Images/040-1.jpg?sign=1739400081-UXlQHD5Ck50dvdes6jl74Rcx9RVPfNHu-0-e3413b7800719ce49a8d60c11fb19c3e)
有时为了方便,会使用typedef给结构体起一个别名(小名):
![](https://epubservercos.yuewen.com/41CA5A/20637464308667306/epubprivate/OEBPS/Images/040-2.jpg?sign=1739400081-2E7GC1kh87qNRnSgGenxV24VUta5wHbL-0-e5cbd3c85ab569cebd071613507ddb89)
使用typedef有什么用处?typedef是C、C++语言的关键字,用于给原有数据类型起一个别名。
语法规则如下:
![](https://epubservercos.yuewen.com/41CA5A/20637464308667306/epubprivate/OEBPS/Images/040-3.jpg?sign=1739400081-PpSn22wndB4hmvtUwso5biTrZVkhvBQu-0-c0abd231328ce67b1e4710486585c0fa)
其中,“类型名称”为已知数据类型,包括基本数据类型(如int、float等)和用户自定义的数据类型(如用struct自定义的结构体);“类型标识符”是为原有数据类型起的别名,需要满足标识符命名规则。就像给某个人起一个小名或绰号一样,《三国演义》中李逵的绰号是“黑旋风”,大家听到“黑旋风”就知道是李逵。
使用typedef的好处如下。
(1)简化比较复杂的类型声明。给复杂的结构体类型起一个别名,这样就可以使用这个别名等价该结构体类型,在声明该类型变量时就方便多了。
(2)提高程序的可移植性。例如,在程序中使用这样的语句:
![](https://epubservercos.yuewen.com/41CA5A/20637464308667306/epubprivate/OEBPS/Images/040-4.jpg?sign=1739400081-CKR8DvXkjaNQXR2vhqfMrhM6X5HYTfby-0-c6d6850a2b5073389cacbec5f7bb9d39)
在程序中就可以直接定义:
![](https://epubservercos.yuewen.com/41CA5A/20637464308667306/epubprivate/OEBPS/Images/040-5.jpg?sign=1739400081-EFEfrhyNeC0OIv5syKsfawP1AM9lowTu-0-ab5ddf405029366001c569106576408b)
在程序中,假如有n个地方用到了ElemType类型,比如现在处理的数据变为字符类型了,就可以将上面类型定义中的int直接改为char:
![](https://epubservercos.yuewen.com/41CA5A/20637464308667306/epubprivate/OEBPS/Images/040-6.jpg?sign=1739400081-VzHhE02y2LnCoaq8yWBels6p3179iD7Q-0-ae038739c21867481749621be925f7fe)
这样只需修改类型定义,无须改动程序中的代码。如果不使用typedef类型定义,就需要把程序中n个用到int类型的地方,全部改为char类型。如果忘记修改某处,就会发生错误。
使用ElemType是为了让算法的通用性更好,因为很多时候结构体定义并不指定处理的数据是什么类型,不能简单地将其写成某种类型。将ElemType结合typedef使用,可以提高算法的通用性和可移植性。