C++結構體數組
一個結構體變量中可以存放一組數據(如一個學生的學號、姓名、成績等數據)。如果有10個學生的數據需要參加運算,顯然應該用數組,這就是結構體數組。結構體數組與以前介紹過的數值型數組的不同之處在于:每個數組元素都是一個結構體類型的數據,它們都分別包括各個成員項。
定義結構體數組和定義結構體變量的方法相仿,定義結構體數組時只需聲明其為數組即可。如:
struct Student //聲明結構體類型Student{ int num; char name[20]; char sex; int age; float score; char addr[30];};Student stu[3]; //定義Student類型的數組stu也可以直接定義一個結構體數組,如:
struct Student{ int num; char name[20]; char sex; int age; float score; char addr[30];}stu[3];或
struct{ int num; char name[20]; char sex; int age; float score; char addr[30];}stu[3];結構體數組的初始化與其他類型的數組一樣,對結構體數組可以初始化。如:
struct Student{ int num; char name[20]; char sex; int age; float score; char addr[30];}stu[3]={ {10101,″Li Lin″, ′M′, 18,87.5, ″103 Beijing Road″}, {10102,″Zhang Fun″,′M′,19,99, ″130 Shanghai Road″}, {10104,″Wang Min″,′F′, 20,78.5, ″1010 Zhongshan Road″}};定義數組stu時,也可以不指定元素個數,即寫成以下形式:
stu[ ]={{…},{…},{…}};
編譯時,系統會根據給出初值的結構體常量的個數來確定數組元素的個數。一個結構體常量應包括結構體中全部成員的值。
當然,數組的初始化也可以用以下形式:
Student stu[ ]={{…},{…},{…}}; //已事先聲明了結構體類型Student
由上可以看到,結構體數組初始化的一般形式是在所定義的數組名的后面加上 ={初值表列};
結構體數組應用舉例
下面舉一個簡單的例子來說明結構體數組的定義和引用。
【例】對候選人得票的統計程序。設有3個候選人,最終只能有1人當選為領導。今有10個人參加投票,從鍵盤先后輸入這10個人所投的候選人的名字,要求最后輸出這3個候選人的得票結果。
可以定義一個候選人結構體數組,包括3個元素,在每個元素中存放有關的數據。程序如下:
#include <iostream>using namespace std;struct Person //聲明結構體類型Person{ char name[20]; int count;};int main( ){ //定義Person類型的數組,內容為3個候選人的姓名和當前的得票數 Person leader[3]={"Li",0,"Zhang",0,"Fun",0}; int i,j; char leader_name[20]; //leader_name為投票人所選的人的姓名 for(i=0;i<10;i++) { cin>>leader_name; //先后輸入10張票上所寫的姓名 for(j=0;j<3;j++) //將票上姓名與3個候選人的姓名比較 //如果與某一候選人的姓名相同,就給他加一票 if(strcmp(leader_name,leader[j].name)==0) leader[j].count++; } cout<<endl; for(i=0;i<3;i++) //輸出3個候選人的姓名與最后得票數 { cout<<leader[i].name<<":"<<leader[i].count<<endl; } return 0;}運行情況如下: