嵌(qian)入式學習筆記:c語言(yan)結(jie)構體的定義和使用
時間:2018-09-06 來源:未知(zhi)

c高(gao)級結(jie)構體如何來學習,這里分享(xiang)一些學習筆(bi)記(ji),可以輕松學c高(gao)級結(jie)構體。
【1】結構體數組
(1)結構(gou)體數組(zu)的定義
1)具有相同(tong)結構(gou)體(ti)(ti)(ti)類型的結構(gou)體(ti)(ti)(ti)變量也(ye)可以組(zu)(zu)成數(shu)組(zu)(zu),稱(cheng)它們(men)為結構(gou)體(ti)(ti)(ti)數(shu)組(zu)(zu)。
結(jie)構體數(shu)組(zu)的(de)每(mei)一個(ge)數(shu)組(zu)元素都是結(jie)構體類型(xing)的(de)數(shu)據,它們都分別包括(kuo)各個(ge)成員(分量(liang))項(xiang)。
2)定義結構(gou)體(ti)(ti)數(shu)組的(de)方法和定義結構(gou)體(ti)(ti)變(bian)量的(de)方法相(xiang)仿,只需說明其為數(shu)組即可。
可以采用三(san)種方法:
a. 先定(ding)義(yi)結構體類(lei)型,再用(yong)它定(ding)義(yi)結構體數(shu)組。結構體數(shu)組的定(ding)義(yi)形(xing)式如下:
struct 結(jie)構(gou)體名(ming)
{
成員表列;
};
struct 結構體名
例如:
struct student
{
char name[20];
char sex;
int age;
char addr[20];
};
struct student stu[3];
b. 在定義結(jie)構體(ti)類型同時定義結(jie)構體(ti)數(shu)組(zu)。結(jie)構體(ti)數(shu)組(zu)的定義形式如下:
struct 結構(gou)體名
{
成員表列;
}數組名[元素個數];
例如:
struct student
{
char name[20];
char sex;
int age;
char addr[20];
}stu[3];
c. 直接(jie)定義結構體數組
結構體數組的定(ding)義形(xing)式如下:
struct //沒有結構體名
{
成員表列;
}數組名[元素個數];
例如:
struct
{
char name[20];
char sex;
int age;
char addr[20];
}stu[3];
(2)結構體數組的初始化
結(jie)構(gou)體數組在定(ding)義的(de)同(tong)時也(ye)可以(yi)進(jin)行初始(shi)化,并(bing)且與結(jie)構(gou)體變量的(de)初始(shi)化規定(ding)相
同,
只(zhi)能對(dui)全局(ju)的或靜態存儲類別的結構(gou)體(ti)數組初始化。
結構體數組初始化的一般形(xing)式(shi)是(shi):
struct 結構體名
{
成員列表;
};
struct 結構體名(ming) 數組(zu)名(ming)[元(yuan)素(su)個(ge)數]={初始數據表};或者:
struct 結構體名
{
成員表列;
}數(shu)組名[元(yuan)素(su)個數(shu)]={初始數(shu)據表};
由(you)于結(jie)構體變量(liang)是由(you)若干(gan)不同(tong)類型的數據組(zu)(zu)(zu)成(cheng),而結(jie)構體數組(zu)(zu)(zu)又是由(you)若干(gan)結(jie)構體變量(liang)組(zu)(zu)(zu)成(cheng)。
所以要特別注(zhu)意包圍在大括號(hao)中的(de)(de)初始數據的(de)(de)順序,以及(ji)它們與各個成員(yuan)項間的(de)(de)對(dui)應關系。
(3)結(jie)構體(ti)數組的使用
一(yi)個結構體數(shu)組(zu)的元素相當(dang)于(yu)一(yi)個結構體變(bian)量(liang),因此前(qian)面介紹的有(you)關結構體變(bian)量(liang)的規則(ze)也適應于(yu)結構體數(shu)組(zu)元素。
以上面定(ding)義(yi)的(de)(de)結構(gou)體(ti)(ti)數組(zu) stu[3]為例說(shuo)明對結構(gou)體(ti)(ti)數組(zu)的(de)(de)引(yin)用:
1)引用某一元素中(zhong)的(de)成員。
若要(yao)引(yin)用數(shu)組第(di)二個元素的 name 成(cheng)員,則可寫為:
stu[1].name
2)可(ke)以將(jiang)一(yi)個結構(gou)體(ti)數組(zu)元素(su)值賦(fu)給(gei)同(tong)一(yi)結構(gou)體(ti)類型的數組(zu)中的另一(yi)個元素(su),或賦(fu)給(gei)同(tong)一(yi)類型的變(bian)量。
如:
struct student stu[3],student1;
現在定(ding)義了(le)一個結構(gou)體類型的(de)(de)數組(zu),它有 3 個元素,又(you)定(ding)義了(le)一個結構(gou)體類型變量student1,則下面的(de)(de)賦值是合法(fa)的(de)(de)。
student1=stu[0];
stu[0]=stu[1];
stu[1]=student1;
3)不(bu)能把(ba)結構體數組元素作為一個整體直(zhi)接(jie)進行輸入輸出(chu)。如(ru):
printf(“…”,stu[0]);
或
scanf(“…”,&stu[0]);
都是錯誤的。
只能以(yi)單(dan)個(ge)成員為(wei)對象進行輸入輸出,如(ru):
scanf(“…”,stu[0].name);
scanf(“…”,&stu[1].num);
printf(“…”,stu[0].name);
printf(“…”,stu[1].num);
(4)結(jie)構體(ti)指針
可以設定一個(ge)指針(zhen)(zhen)(zhen)變量(liang)(liang)用來(lai)指向一個(ge)結(jie)(jie)構(gou)體(ti)變量(liang)(liang)。此(ci)時該(gai)指針(zhen)(zhen)(zhen)變量(liang)(liang)的值是結(jie)(jie)構(gou)體(ti)變量(liang)(liang)的起始地址(zhi),該(gai)指針(zhen)(zhen)(zhen)稱為結(jie)(jie)構(gou)體(ti)指針(zhen)(zhen)(zhen)。
結構(gou)體指(zhi)針(zhen)與前(qian)面介紹的各種(zhong)指(zhi)針(zhen)變量在(zai)特性和方法上是(shi)相同的。與前(qian)述相同,在(zai)程序中(zhong)結構(gou)體指(zhi)針(zhen)也(ye)是(shi)通過(guo)訪問目(mu)標運算(suan)“*”訪問它(ta)的對象。
結構體指針(zhen)在程序中(zhong)的一般定義(yi)形式為:
struct 結構體名(ming) *結構指針名(ming);
其(qi)中的結構體名必須是已經定義(yi)過(guo)的結構體類(lei)型。
例如,
對于上一(yi)節中定(ding)義的結構(gou)體類型 struct student,
可以說明使用這種結構體(ti)類型的結構指針如下:
struct student *pstu;
其中 pstu 是指向 struct student 結(jie)(jie)構體(ti)類型的(de)(de)指針(zhen)。結(jie)(jie)構體(ti)指針(zhen)的(de)(de)說明規定了它的(de)(de)數據特(te)性,并為(wei)結(jie)(jie)構體(ti)指針(zhen)本身(shen)分配(pei)了一定的(de)(de)內存空間。
但是指(zhi)針的(de)內容(rong)尚(shang)未確定,即(ji)它(ta)指(zhi)向隨機的(de)對象。
當表示指(zhi)針變(bian)量 p 所指(zhi)向的結構體變(bian)量中的成(cheng)(cheng)員時,“(*結構體指(zhi)針名).成(cheng)(cheng)員名”這(zhe)種表示形式總是需要使(shi)用圓(yuan)括號(hao),顯得很不簡煉。
因此(ci),對于(yu)結構體指(zhi)針指(zhi)向的(de)結構體成員項,給出了另外一種簡潔的(de)表(biao)示方法,如下表(biao)
示:
結構體指針名(ming)->成(cheng)員名(ming)
它與前一種表示(shi)方法在(zai)意義上是(shi)完(wan)全等價的(de)。
例(li)如,結構(gou)體指(zhi)(zhi)針 p 指(zhi)(zhi)向的(de)結構(gou)體變(bian)量中的(de)成員 name 可以表示如下:
(*p).name 或 p->name

