結構體陣列簡單介紹
阿新 • • 發佈:2021-04-03
處理資料時,我們常常會遇到儲存多組相關資料的情況,例如我們想要記錄一個班學生的學號,成績等等資訊。這時有人會想到多維陣列,但是陣列儲存的每一個元素都需要是同一型別。這時,結構變數能夠提高我們表達資料的能力。
它是即能包含字串又能包含數字,還能保持各資訊獨立的資料形式。
下面用貓貓舉例:
#include <stdio.h>
struct cat {
char name[20];
char colour[10]; /*建立結構宣告*/
int age;
};
int main()
{
/*定義結構變數,並初始化*/
struct cat fellow[2] = {
{
"dodo" ,
"white",
2
},
{
"mimi",
"black",
8
}
};
/*訪問結構體陣列的成員*/
printf("The first cat's name is %s.\n", fellow[0].name);
printf("The second cat's age is %d yeas old. ", fellow[1].age);
}
1.定義結構宣告
struct cat {
char name[20];
char colour[ 10];
int age;
};
- struct 表明其後是一個結構。
- “cat” 是跟在struct的一個標記,標記名可以據自己所需。
- {} 一對花括號中間就是結構的成員列表。每個成員可以有自己的宣告,例如字串或者整型。
注:花括號之後的 分號; 表示結構佈局定義結束,不可缺少。
2.定義結構變數、初始化
struct cat fellow1;//定義單個變數
struct cat fellow[2];//定義陣列
- 在這裡 struct cat 的功能就像我們常見的int 或 char 一樣。
當然在這裡也可以將宣告結構的過程和定義結構變數的過程結合為一個步驟。
(宣告的右括號後跟變數名)
struct cat {
char name[20];
char colour[10];
int age;
}fellow[2];
初始化結構
struct cat fellow[2] = {
{
"dodo",
"white",
2
},
{
"mimi",
"black",
8
}
};
以花括號{}的形式進行初始化,這裡也適當注意 逗號, 的位置,以免弄錯。
除了整體初始化,也可以對單獨的成員進行初始化
struct cat one={.age=7};
同樣可以進行結構巢狀
struct name{
char first[10];/*第一個結構*/
char last[10];
};
struct cat {
struct name handle;
char colour[10]; /*第二個結構*/
int age;
};
struct cat fellow={
{"wa","dodo"}, /*初始化*/
"black",
8
};
3.訪問結構成員
這裡要用到一個新的運算子——點(.)
即,
訪問:在結構名後面加一個點運算子,再在點運算子後面寫上成員名。
scanf("%s",&fellow[0].name);
這裡 . 比 & 的 運算子高。
——————————————————————
最後再來個例子:
輸入一個班同學的資訊,包括姓名,學號,成績。最後輸出成績最好的那位同學的資訊。
#include <stdio.h>
struct stu {
char name[20];
int num;
int score; /*建立結構宣告*/
};
int main()
{
/*定義結構變數*/
struct stu fellow[3];
struct stu maxstu = {.score=0};
for (int i = 0;i < 3;i++) {
scanf("%s %d %d", &fellow[i].name, &fellow[i].num, &fellow[i].score);
if (maxstu.score < fellow[i].score) {
maxstu = fellow[i];
}
}
/*輸出成績最好的那位同學*/
printf("name:%s, num:%d, score:%d", maxstu.name,maxstu.num,maxstu.score);
}