結構體是在資料結構中經常使用的一類,下面對結構體進行一些知識的補充
結構體宣告的基本形式
struct tag variable-list;
引數解釋
tag:結構體的名字
member-list:成員列表
variable-list:變數列表
在結構體宣告的時候,我們常會看到下面兩種宣告的方式
方式一(不帶 tag)
struct man;
大多數初學者看到這一長串的時候會發昏,這樣的宣告形式和一般的int a的形式有什麼關聯呢?
方式二
struct people;
struct people man1 , man2;
我們可以看到方式二的好處就是減少了變數宣告的冗餘。如果像方式一那樣,你在另乙個地方要宣告乙個相同的變數,就必須把前面的成員列表那一大部分也帶上。
同時使用方法一還會存在下面這個問題
struct man1;
structman2;
man1 = man2; // 報錯
雖然 man1 和 man2 是一樣的結構體型別,但是編譯器會認為是不同的型別。
但如果用方式二就不會報錯
struct people;
struct people man1 , man2; // 或者為了好理解,也可以是
// struct people xiaozhang , xiaoli;
struct people man3;
man1 = man3; // 這樣就正確
typedef 也是在資料結構中常用的 c 語言的東西。它的英文翻譯是 「型別定義」。下面就來
看看它的用法。
我更喜歡叫 typedef 為語義化,因為很大程度上使用 typedef 是為了語義化,是需要結合現實
世界的。
typedef int money
這句**的意思就是,從今往後,money 就可以代表 int 使用了。
money money ; // 此時 money 就是 int 型別
至於為什麼使用 typedef 這樣的方式,個人最大的感受就是語義化吧,當然 typedef 為什麼要使用的其他原因可以自行谷歌。
先來看看這段**
typedef struct people chinese;
很多人會和結構體的宣告弄混,其實不是,我用圖例來解釋就清楚了(對比結構體宣告的圖例,觀察二者的區別)
當然,用 typedef 的時候,你也可以省略結構的標籤,所以你有時還會看到下面的寫法
typedef struct chinese;
下面來看看資料結構單鏈表裡面比較難理解的對單鏈表如何去定義
typedef
struct node_1
node_2;
typedef
struct node_1 *linklist;
// 通常**會把 node_1 和 node_2 都寫成一樣的 node,具體的原因我也不是很清楚,
// 但是僅就**而言 node_1 表示的是結構體的名稱,而 node_2 表示的是代替簡寫
// struct node_1 的名稱。
// 特別的是 struct node_1 定義的是乙個單獨的結點,所以我們看到 struct node_1
// *next; 其本意是只該結點的下乙個結點
// 而 typedef struct node_1 *linklist; 表示的是乙個結構體指標,有了指標,我們就
// 可以通過 malloc 函式將乙個單獨的結點擴充成乙個鍊錶了。
// 所以我們在定義 *linklist 的時候,typedef node_2 *linklist; 和
// typedef struct node_1 *linklist; 都是正確的。
主**
C語言 資料結構 結構體
一 結構體的定義 陣列 array 是一組具有相同型別的資料的集合。但在實際的程式設計過程中,我們往往還需要一組型別不同的資料,例如對於學生資訊登記表,姓名為字串,學號為整數,年齡為整數,所在的學習小組為字元,成績為小數,因為資料型別不同,顯然不能用乙個陣列來存放。結構體 struct 可以來存放一...
C語言中結構體
struct oursvoid main struct ours o2 01 結構體整體直接賦值的時候,即使字串也可以直接賦值 o1.str o2.str 錯誤,字串不能直接賦值 字串拷貝的方式 sprintf o1.str,02.str strcpy o1.str,o2.str 3.1 第一種情況...
C語言中的結構體
在 c語言中,結構體 struct 指的是一種資料結構,是c語言中聚合資料型別 aggregate data type 的一類。結構體可以被宣告為 變數 指標或 陣列等,用以實現較複雜的 資料結構。結構體同時也是一些元素的集合,這些元素稱為結構體的成員 member 且這些成員可以為不同的型別,成員...