c高級結構體如何來學習,這里分享一些學習筆記,可以輕松學c高級結構體。
【1】結構體數組
(1)結構體數組的定義
1)具有相同結構體類型的結構體變量也可以組成數組,稱它們為結構體數組。
結構體數組的每一個數組元素都是結構體類型的數據,它們都分別包括各個成員(分量)項。
2)定義結構體數組的方法和定義結構體變量的方法相仿,只需說明其為數組即可。
可以采用三種方法:
a. 先定義結構體類型,再用它定義結構體數組。結構體數組的定義形式如下:
struct 結構體名
{
成員表列;
};
struct 結構體名
例如:
struct student
{
char name[20];
char sex;
int age;
char addr[20];
};
struct student stu[3];
b. 在定義結構體類型同時定義結構體數組。結構體數組的定義形式如下:
struct 結構體名
{
成員表列;
}數組名[元素個數];
例如:
struct student
{
char name[20];
char sex;
int age;
char addr[20];
}stu[3];
c. 直接定義結構體數組
結構體數組的定義形式如下:
struct //沒有結構體名
{
成員表列;
}數組名[元素個數];
例如:
struct
{
char name[20];
char sex;
int age;
char addr[20];
}stu[3];
(2)結構體數組的初始化
結構體數組在定義的同時也可以進行初始化,并且與結構體變量的初始化規定相
同,
只能對全局的或靜態存儲類別的結構體數組初始化。
結構體數組初始化的一般形式是:
struct 結構體名
{
成員列表;
};
struct 結構體名 數組名[元素個數]={初始數據表};或者:
struct 結構體名
{
成員表列;
}數組名[元素個數]={初始數據表};
由于結構體變量是由若干不同類型的數據組成,而結構體數組又是由若干結構體變量組成。
所以要特別注意包圍在大括號中的初始數據的順序,以及它們與各個成員項間的對應關系。
(3)結構體數組的使用
一個結構體數組的元素相當于一個結構體變量,因此前面介紹的有關結構體變量的規則也適應于結構體數組元素。
以上面定義的結構體數組 stu[3]為例說明對結構體數組的引用:
1)引用某一元素中的成員。
若要引用數組第二個元素的 name 成員,則可寫為:
stu[1].name
2)可以將一個結構體數組元素值賦給同一結構體類型的數組中的另一個元素,或賦給同一類型的變量。
如:
struct student stu[3],student1;
現在定義了一個結構體類型的數組,它有 3 個元素,又定義了一個結構體類型變量student1,則下面的賦值是合法的。
student1=stu[0];
stu[0]=stu[1];
stu[1]=student1;
3)不能把結構體數組元素作為一個整體直接進行輸入輸出。如:
printf(“…”,stu[0]);
或
scanf(“…”,&stu[0]);
都是錯誤的。
只能以單個成員為對象進行輸入輸出,如:
scanf(“…”,stu[0].name);
scanf(“…”,&stu[1].num);
printf(“…”,stu[0].name);
printf(“…”,stu[1].num);
(4)結構體指針
可以設定一個指針變量用來指向一個結構體變量。此時該指針變量的值是結構體變量的起始地址,該指針稱為結構體指針。
結構體指針與前面介紹的各種指針變量在特性和方法上是相同的。與前述相同,在程序中結構體指針也是通過訪問目標運算“*”訪問它的對象。
結構體指針在程序中的一般定義形式為:
struct 結構體名 *結構指針名;
其中的結構體名必須是已經定義過的結構體類型。
例如,
對于上一節中定義的結構體類型 struct student,
可以說明使用這種結構體類型的結構指針如下:
struct student *pstu;
其中 pstu 是指向 struct student 結構體類型的指針。結構體指針的說明規定了它的數據特性,并為結構體指針本身分配了一定的內存空間。
但是指針的內容尚未確定,即它指向隨機的對象。
當表示指針變量 p 所指向的結構體變量中的成員時,“(*結構體指針名).成員名”這種表示形式總是需要使用圓括號,顯得很不簡煉。
因此,對于結構體指針指向的結構體成員項,給出了另外一種簡潔的表示方法,如下表
示:
結構體指針名->成員名
它與前一種表示方法在意義上是完全等價的。
例如,結構體指針 p 指向的結構體變量中的成員 name 可以表示如下:
(*p).name 或 p->name