結(jié)構(gòu)是一種數(shù)據(jù)類型,因此它也有對應(yīng)的結(jié)構(gòu)數(shù)組和指向結(jié)構(gòu)的指針。
結(jié)構(gòu)數(shù)組
定義結(jié)構(gòu)數(shù)組和定義其他類型的數(shù)組在語法上并無差別。需要注意的是,在定義結(jié)構(gòu)數(shù)組之前,我們必須先定義好這個(gè)結(jié)構(gòu)。比如:
struct student
{
int idNumber;
char name[15];
int age;
char department[20];
float gpa;
};
……
student S[3]={ {428004, "Tomato",20, "ComputerScience",84.5},
{428005, "OOTTMA",20, "ComputerScience",85.0},
{428006, "OTA",20, "ComputerScience",89.8}};
……
使用結(jié)構(gòu)數(shù)組只要遵循結(jié)構(gòu)和數(shù)組使用時(shí)的各項(xiàng)規(guī)則即可,在此不作贅述。
結(jié)構(gòu)指針
在上一章我們了解到指針的一個(gè)重要作用就是實(shí)現(xiàn)內(nèi)存的動(dòng)態(tài)分配(堆內(nèi)存)。待我們學(xué)完了這一章,我們會(huì)發(fā)現(xiàn)結(jié)構(gòu)指針也是一個(gè)非常有用的工具。
所謂結(jié)構(gòu)指針就是指向結(jié)構(gòu)的指針。定義好一個(gè)結(jié)構(gòu)之后,定義一個(gè)結(jié)構(gòu)指針變量的語法格式為:
結(jié)構(gòu)類型名 *指針變量名;
我們知道一般的指針是通過間接引用操作符“*”來訪問它指向的變量。那么我們?nèi)绾卧L問結(jié)構(gòu)指針?biāo)赶虻淖兞康某蓡T數(shù)據(jù)呢?這里要介紹箭頭操作符“->”,我們用它可以訪問到指針指向的變量的成員數(shù)據(jù)。它的格式為:
指針變量名->成員數(shù)據(jù)
需要注意的是,箭頭操作符的左邊一定是一個(gè)結(jié)構(gòu)指針,而成員操作符的左邊一定是一個(gè)結(jié)構(gòu)變量,兩者不能混淆使用。
下面我們來看一段程序,掌握如何使用結(jié)構(gòu)指針:(程序9.4)
#include "iostream.h"
struct student
{
int idNumber;
char name[15];
int age;
char department[20];
float gpa;
};
void display(student *arg);//結(jié)構(gòu)指針作為函數(shù)參數(shù)
int main()
{
student s1={428004, "Tomato",20, "ComputerScience",84.5};//初始化結(jié)構(gòu)變量
student *s1ptr=&s1;//定義結(jié)構(gòu)指針變量,并把s1的地址賦值給s1ptr
display(s1ptr);
return 0;
}
void display(student *arg)
{
cout <<"學(xué)號:" <<arg->idNumber <<"姓名:" <<arg->name <<"年齡:" <<arg->age <<endl <<"院系:" <<arg->department <<"成績:" <<arg->gpa <<endl;//用箭頭操作符訪問成員數(shù)據(jù)
}
運(yùn)行結(jié)果:
學(xué)號:428004姓名:Tomato年齡:20
院系:ComputerScience成績:84.5