c語言 結構體

2021-06-22 01:29:49 字數 2520 閱讀 7851

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...