打字猴:1.70041546e+09
1700415460
1700415461 一旦定义完结构体,就可以把结构体当作是一种数据类型,用它来定义变量。如果把结构体TestResult用作数据类型并定义出了一个名为xioaming的变量(代表小明的成绩),那么在内存上就相应地分配出一块空间,这块空间由用于存储Chinese,Math,English这三个成员(Member)数据所需的空间汇集而来。被汇集到结构体中的每个数据项都被称为“结构体的成员”。在为结构体的成员赋值或是读取成员的值时,可以使用形如xiaoming.Chinese(表示小明的语文成绩)的表达式,即以“.”分割变量和结构体的成员(如代码清单6.9所示)
1700415462
1700415463 代码清单 6.9 结构体的使用方法
1700415464
1700415465 struct TestResult xiaoming;   /*把结构体作为数据类型定义变量*/
1700415466
1700415467 xiaoming.Chinese=80;          /*为成员数据Chinese赋值*/
1700415468
1700415469 xiaoming.Math=90;             /*为成员数据Math赋值*/
1700415470
1700415471 xiaoming.English=100;         /*为成员数据English赋值*/
1700415472
1700415473 如果要编写一个用于处理100名学生考试成绩的程序,需要定义一个以TestResult为数据类型,包含100个元素的数组。通过定义,在内存上就分配出一块空间,能够存储100个数据的集合,每个数据的集合中都含有Chinese,Math,English三个数据项(如图6.10所示)。接下来只要巧妙地运用结构体的数组就可以实现链表和二叉树了
1700415474
1700415475 图6.10 结构体数组的示意图
1700415476
1700415477
1700415478
1700415479
1700415480
1700415481
1700415482
1700415483 计算机是怎样跑起来的 [:1700412676]
1700415484 计算机是怎样跑起来的 6.7 要点7:了解链表和二叉树的实现方法
1700415485
1700415486 下面讲解如何使用结构体的数组实现链表和二叉树。链表是一种类似数组的数据结构,这个“数组”中的每个元素和另一个元素都好像是手拉着手一样。在现有的以结构体TestResult为数据类型的数组Student[100]中,为了让各个元素“把手拉起来”,就需要在结构体中再添加一个成员(如代码清单6.10所示)
1700415487
1700415488 代码清单6.10 带有指向其他元素指针的自我引用结构体
1700415489
1700415490 struct TestResult{
1700415491
1700415492   char Chinese;         /*语文成绩*/
1700415493
1700415494 char Math;            /*数学成绩*/
1700415495
1700415496 char English;         /*英语成绩*/
1700415497
1700415498   struct TestResult* Ptr;  /*指向其他元素的指针*/
1700415499
1700415500 };
1700415501
1700415502 请注意,这里在结构体TestResult中添加了这样一个元素:
1700415503
1700415504 struct TestResult* Prt
1700415505
1700415506 本节不会详细分析这条语句,但简单地说,这里的成员Prt存储了数组中另一个元素的地址。在C语文中,把存储着地址的变量称为“指针”。这里的*(星号)就是指针的标志。可以看到,Ptr就是以结构体TestResult的指针(struct TestResult*)为数据类型的成员。这种特殊的结构体可以称为“自我引用的结构体”。之所以叫这个名字是因为在结构体TestResult的成员中,含有以TestResult的指针为数据类型的成员,这就相当于TestResult引用了与自身相同的数据类型。
1700415507
1700415508 在结构体TestResult(已变成了自我引用的结构体)的数组中,每个元素都含有一个学生的语文、数学、英语成绩以及成员Ptr。Prt中存储着本元素接下来该与哪个元素相连的信息,即一个元素的地址。
1700415509
[ 上一页 ]  [ :1.70041546e+09 ]  [ 下一页 ]