1、定義結構體
c語言允許使用者自己建立不同型別資料組成的組合型的資料結構
struct 結構體名
;(1)結構體的型別不是只有一種,可以根據需要設計許多種,如struct student 、struct worker等
(2)結構體的成員可以是另一結構體的成員,注意的是引用此成員的方式
2、定義結構體變數
(1)先宣告結構體,在定義該型別的變數
struct student student1,student2;
(2)在宣告型別的同時定義變數
struct student
student1,student2;
(3)不指定型別名而直接定義結構體型別變數
struct
變數名列表;
這種形式指定了乙個無名的結構體型別,但不能再以此結構定義其他變數
a、結構體型別和結構體變數別混淆了,不能對結構體型別進行賦值、訪問、運算、分配空間,但對結構體變數可以
b、結構體中的變數可以與程式中變數名相同,二者代表不同物件
c、對結構體中成員的使用,作用相當於普通變數
3、結構體成員的引用
(1)引用方式:
結構體變數.成員名 如:student.name、student.num 「.」是成員運算子,在所有運算子中優先級別最高
(2)如果成員本身又屬於另一結構體的成員
如結構體中包含另一結構體2的成員變數,則引用方式為:結構體1變數.結構體1的成員.結構體2的成員
(3)對結構體變數的成員可以像普通變數一樣進行各種運算
(4)可以引用結構體變數的位址和結構體變數的成員位址
scanf("&d",&變數名.成員),輸入變數成員的值
printf("%o",&變數名),輸入變數的首位址
4、結構體陣列
(1)第一結構體陣列的一般形式:
a、struct 結構體名
陣列名[陣列長度];
b、先宣告乙個結構體型別,然後再用此結構體定義結構體陣列
struct 型別名 陣列名[陣列長度];
(2)對結構體陣列初始化的形式是在定義陣列後面加上的
struct 型別名 陣列名[陣列長度]=;
5、結構體指標
結構體指標就是指向結構體資料的指標
乙個結構體變數的其實位址就是這個結構體變數的指標,指標變數既可以指向結構體變數,也可以指向結構體陣列中的元素
如果p指向乙個結構體變數,以下3種形式等價:
a、結構體變數.成員名
b、(*p).成員名
c、p->成員名
(1)如果p的初值為stu,即指向stu的第乙個元素(stu[0]),p+1,p就指向下乙個元素(stu[1])
(2)如果程式已定義了p是指向struct student 型別資料的指標變數,用它來指向乙個struct student 型別的資料,就不應用來指向stu陣列元素中的成員
因為型別不符,但如果強制轉換某元素成員的型別,如:p=(struct student *)stu[0].name,則p+1,指向下一元素的name的值
6、用結構體變數和結構體變數的指標作函式引數
將乙個結構體變數的值傳遞給另乙個函式,有3中形式:
(1)用變數的成員作函式引數,將實參值傳給形參,與普通變數作實參一樣,屬於值傳遞
(2)用結構體變數作函式引數,用結構体作實參時,採用的也是值傳遞,將結構體變數所佔的記憶體單元的內容全部順序傳遞給形參,形參也必須同型別的結構體變數
(3)用指向結構體變數(或陣列)的指標作實參,將結構體變數(或陣列)的位址傳遞給形參
7、用指標處理鍊錶
(1)線性鍊錶
如果有一批資料要儲存和引用,有兩種方法:
a、採取分配固定儲存單元的方法
b、動態的資料結構,沒有固定的大小,根據需要開闢儲存單元,用完隨時釋放,線性表就是一種動態分配記憶體的資料結構
頭指標:指向第乙個元素的位址,每個元素有兩個部分:資料部分和指標變數(指向下乙個元素的位址),鍊錶中元素的位址可以是不連續的
8、建立靜態鍊錶
所有的節點都是在程式中定義的,不是臨時開闢的,用完後也不能釋放
定義了乙個結構體指標變數 ,struct student *next;
10、建立動態鍊錶
在程式執行過程中從無到有地建立乙個鍊錶,即乙個乙個地開闢結點和輸入各結點資料,並建立起前後連線關係
11、共用體型別
有時需要將幾種不同型別的變數存放到同一段記憶體單元中,幾個變數相互覆蓋,稱為共用體
一般形式:
union 共用體名
變數列表;
(1)共用體所佔的記憶體長度等於最長成員的長度,而結構體是每個成員占用記憶體之和
(2)不能飲用共用體的變數,只能引用共用體變數的成員
12、列舉型別
如果乙個變數只有幾種可能的值,則可以定義為列舉型別,列舉就是將變數的值一一列出來,如weekday
列舉型別 列舉變數 如:enmu weekday workday,week_end;
也可以直接定義列舉變數 如:enum workday,week_end; sun.....稱為列舉元素或列舉常量
C語言結構體
1.1.1 結構概念 1 結構存在的意義 存在是合理的,許多事物的存在是在不斷解決問題引入的,當然有更好的方法出現時改變也是合理的。在實際問題中,一組資料往往具有不同的資料型別。例如,在學生登記表中,姓名應為字元型,學號可為整型或字元型,年齡應為整型,性別應為字元型,成績可為整型或實型。顯然不能用乙...
C語言 結構體
宣告乙個結構體型別 struct 結構體名 成員表列 定義結構體變數的方法 1 先宣告結構體型別再定義變數名。在定義了結構體變數後,系統會為之分配記憶體單元.例如 struct student student1,student2 2 在宣告型別的同時定義變數,例如 struct 結構體名 成員表列 ...
C語言 結構體
以前學過的基本資料型別有int型 儲存整形資料 float型 儲存浮點型資料 char型 儲存字元型資料 這些都是不能拆分的基本資料型別,而結構體也是一種資料型別,它是一種構造型別,是可以進行拆分的。結構體裡可以儲存整形資料 浮點型資料 字元型資料.相當於把基本資料型別整合到結構體裡 結構體命名 s...