結構體的認識與深入解析

2021-08-10 21:06:22 字數 2098 閱讀 9223

結構體

宣告乙個結構體型別的一般形式為:

struct 結構體名 {成員表列}

定義結構體型別變數:

(1)先宣告結構體型別再定義變數名

例如:struct student student1, student2;

(2)在宣告型別的同時定義變數

這種形式的定義的一般形式為:

struct 結構體名

{ 成員表列;

}變數名表列

在定義了結構體變數以後,當然可以引用這個變數。但應遵守以下規則:

(1)不能將乙個結構體變數作為乙個整體進行輸入和輸出。

例如: 已定義student1和student2為結構體變數並且它們已有值。

printf(″%d,%s,%c,%d,%f,%\n″,student1); 錯誤

(2) 可以引用結構體變數成員的位址,也可以引用結構體變數的位址。

結構體陣列:和定義結構體一樣,

struct student

stu[3];

定義了乙個陣列stu,陣列有3個元素,均為struct student型別資料。

結構體成員的表現形式:

結構體變數.成員名

(*p).成員名

p->成員名

其中->稱為指向運算子。

結構體和鍊錶:

用結構體建立鍊錶:

struct student

; 其中成員num和score用來存放結點中的有用資料(使用者需要用到的資料),next是指標型別的成員,它指向struct student型別資料(這就是next所在的結構體型別)

記憶體管理

處理動態記憶體所需的函式

庫函式提供動態地開闢和釋放儲存單元的

有關函式:

1)malloc函式: void *malloc(unsigned int size);

其作用:是在記憶體的動態儲存區中分配乙個長度為size的連續空間。

返回值:是乙個指向分配域起始位址的指標(型別為void)。如果此函式未能成功地執行(例如記憶體空間不足),則返回空指標(null)。

2) calloc函式 :void *calloc(unsigned n,unsigned size);

作用:

在記憶體的動態儲存區中分配n個長度為size的連續空間。

返回值:乙個指向分配域起始位址的指標;

如果分配不成功,返回null。

用calloc函式可以為一維陣列開闢動態儲存空間,n為陣列元素個數,每個元素長度為size。

(3) free函式: void free(void *p);

作用:

釋放由p指向的記憶體區,使這部分記憶體區能被其他變數使用。

p是最近一次呼叫calloc或malloc函式時返回的值。

free函式無返回值。

union、enum、typedef

共用體

使幾個不同的變數共占同一段記憶體的結構

稱為 「共用體」型別的結構。

定義共用體型別變數的一般形式為:

union 共用體名

{ 成員表列

}變數表列;

共用體和結構體的比較:

結構體變數所佔記憶體長度是各成員佔的記憶體長度之和。每個成員分別占有其自己的記憶體單元。

共用體變數所佔的記憶體長度等於最長的成員的長度

用typedef定義型別的方法:

① 先按定義變數的方法寫出定義體(如:int i)。

② 將變數名換成新型別名(例如:將i換成count)。

③ 在最前面加typedef

(例如:typedef int count)。

④ 然後可以用新型別名去定義變數。

宣告num為整型陣列型別 : typedef int num[100];

宣告string為字元指標型別:

typedef char *string;

宣告pointer為指向函式的指標型別,該函式返回整型值 : typedef int (*pointer)()

結構體的認識與訪問

5.1 定義結構 什麼是結構?結構由數目固定的成員構成,各成員可以具有不同的資料型別,包括基本型別和非基本型別。乙個結構變數在記憶體占有一片連續的儲存空間,但是,因為各個資料成員的型別不同,所以具有特定的定義和訪問形式。struct 識別符號 5.2 訪問結構 例 訪問結構變數 include us...

對函式與結構體的淺薄認識

1182 獎學金 輸入包含n 1行 第1行為乙個正整數n 6 n 300 表示該校參加評選的學生人數。第2到n 1行,每行有3個用空格隔開的數字,每個數字都在o到100之間z第1行的3個數 字依次表示學號為j 1的學生的語文 數學 英語的成績。每個學生的學號按照輸入順序編號為l n 恰好是輸入資料的...

struct stat結構體解析

在使用這個結構體和方法時,需要引入 struct stat這個結構體是用來描述乙個linux系統檔案系統中的檔案屬性的結構。可以有兩種方法來獲取乙個檔案的屬性 1 通過路徑 int stat const char path,struct stat struct stat int lstat cons...