當(dāng)前位置:首頁 > 嵌入式培訓(xùn) > 嵌入式學(xué)習(xí) > 學(xué)習(xí)筆記 > 嵌入式學(xué)習(xí)筆記:c語言結(jié)構(gòu)體學(xué)習(xí)方法
C語言結(jié)構(gòu)體學(xué)習(xí)還是很簡單的,有些人對結(jié)構(gòu)體的學(xué)習(xí)很迷茫,那就是因為你沒有掌握方法來學(xué),今天分享一下學(xué)習(xí)C語言結(jié)構(gòu)體的方法,一起來看:
【1】定義
【2】結(jié)構(gòu)體類型變量的定義方法
【3】結(jié)構(gòu)體普通變量的使用形式
【4】結(jié)構(gòu)體大小
【5】結(jié)構(gòu)體指針
【6】結(jié)構(gòu)體數(shù)組
【7】結(jié)構(gòu)體數(shù)組的使用
【1】定義
不同類型的數(shù)據(jù)是互相聯(lián)系組成了一個有機的整體。此時,就要用到一種新的構(gòu)造類型數(shù)據(jù)——結(jié)構(gòu)體(structure),簡稱結(jié)構(gòu)。
定義一個結(jié)構(gòu)體類型的一般形式為:
struct 結(jié)構(gòu)體名
{
數(shù)據(jù)類型
數(shù)據(jù)類型
成員名1;
成員名2;
:
數(shù)據(jù)類型
成員名n;
};
在大括號中的內(nèi)容也稱為“成員列表”或“域表”,其中每個成員名的命名規(guī)則與變量名相同;數(shù)據(jù)類型可以是基本變量類型和數(shù)組類型,或者是一個結(jié)構(gòu)體類型。用分號“;”作為結(jié)束符。整個結(jié)構(gòu)的定義也用分號作為結(jié)束符
說明:結(jié)構(gòu)體類型中的成員名可以與程序中的變量名相同,二者并不代表同一對象,編譯程序可以自動對它們進行區(qū)分。
最后,總結(jié)一下結(jié)構(gòu)體類型的特點:
(1)結(jié)構(gòu)體類型是用戶自行構(gòu)造的。
(2)它由若干不同的基本數(shù)據(jù)類型的數(shù)據(jù)構(gòu)成。
(3)它屬于C語言的一種數(shù)據(jù)類型,與整型、實型相當(dāng)。
//定義它時不分配空間,只有用它定義變量時才分配空間。//注意:結(jié)構(gòu)體需要在程序的最上面定義//注意:定義一個結(jié)構(gòu)體時,沒有開辟空間
【2】結(jié)構(gòu)體類型變量的定義方法
這是C語言中定義結(jié)構(gòu)體類型變量最常見的方式
struct 結(jié)構(gòu)體名
(1)先定義結(jié)構(gòu)體類型再定義變量 {
名 成員列表;
};
struct 結(jié)構(gòu)體名變量名;
struct 結(jié)構(gòu)體名
(2)在定義類型的同時定義變量 {
成員列表;
}變量名;
struct//沒有結(jié)構(gòu)體名
(3)直接定義結(jié)構(gòu)類型變量 {
成員列表
}變量名;
struct stu//有名結(jié)構(gòu)體
{
int id;
char name[N];
struct//一般在結(jié)構(gòu)體內(nèi)部再定義一個結(jié)構(gòu)體,則需
要使用無名結(jié)構(gòu)體
(4)嵌套定義結(jié)構(gòu)體變量{
int year;
int mon;
int day;
}birthday; birthday為stu內(nèi)部成員的變量的名字
int score;
char sex;
};
【3】結(jié)構(gòu)體普通變量的使用形式
使用結(jié)構(gòu)體變量訪問結(jié)構(gòu)體成員
結(jié)構(gòu)體變量的成員用以下一般形式表示:
結(jié)構(gòu)體變量名.成員名
【4】結(jié)構(gòu)體大小
一個結(jié)構(gòu)體變量占用內(nèi)存的實際大小,也可以利用sizeof求出。它的運算表達式
為:
sizeof(運算量)
注意: 4 字節(jié)對齊,
若某一變量所占字節(jié)為4字節(jié)或是4字節(jié)的倍數(shù)的情況下(int、float、double、long),它之前的變量所占空間若不為4的倍數(shù)(char、short),則需將其補齊為4的倍數(shù)
例如:char ch;
int i; // 則ch同樣占據(jù)4字節(jié)
char ch2;
short s;
long l; // ch2 與 s 共同占據(jù)4字節(jié),l 占據(jù) 4 字節(jié)
【5】結(jié)構(gòu)體指針
//結(jié)構(gòu)體指針變量訪問成員,通常使用x->或者(*x)
【6】結(jié)構(gòu)體數(shù)組
具有相同結(jié)構(gòu)體類型的結(jié)構(gòu)體變量也可以組成數(shù)組,稱它們?yōu)榻Y(jié)構(gòu)體數(shù)組。
結(jié)構(gòu)體數(shù)組的定義形式如下:
struct 結(jié)構(gòu)體名
(1)先定義結(jié)構(gòu)體類型,再用它定義結(jié)構(gòu)體數(shù){
組。成員表列;
};
struct 結(jié)構(gòu)體名數(shù)組名[元素個數(shù)]
(2)在定義結(jié)構(gòu)體類型同時定義結(jié)構(gòu)體數(shù)組。結(jié)構(gòu)體數(shù)組的定義形式如下:
struct 結(jié)構(gòu)體名
{
成員表列;
}數(shù)組名[元素個數(shù)];
結(jié)構(gòu)體數(shù)組的定義形式如下:
struct//沒有結(jié)構(gòu)體名
(3)直接定義結(jié)構(gòu)體數(shù)組{
成員表列;
}數(shù)組名[元素個數(shù)];
【7】結(jié)構(gòu)體數(shù)組的使用
(1)引用某一元素中的成員。
(2)可以將一個結(jié)構(gòu)體數(shù)組元素值賦給同一結(jié)構(gòu)體類型的數(shù)組中的另一個元素,
或賦給同一類型的變量。
//結(jié)構(gòu)體數(shù)組本質(zhì)上是一個數(shù)組,所以不能通過數(shù)組名進行賦值
struct stu t[3];
//t = s;
//數(shù)組元素相當(dāng)于變量,所以可以使用結(jié)構(gòu)體數(shù)組元素進行賦值 t[0] = s[0];
t[1] = s[1];
t[2] = s[2];
(3)不能把結(jié)構(gòu)體數(shù)組元素作為一個整體直接進行輸入輸出。