Gary Gong

1 minute read

struct & typedef struct

基本上我們會這樣使用 struct

struct {
...
} p1, p2;

此時, p1,p2 這兩個變數是隸屬於 struct {...} 型態的變數。

但是遇到以下需要分開 p1, p2 變數做宣告時,就必須得:

struct {
...
} p1;

/* 一堆程式碼 */

struct {
...
} p2;

我們需要重複打兩次 struct {...} 的內容,非常之冗;所以於是有了第二種方式:

struct p_type {
...
};

struct p_type p1;
struct p_type p2;

struct 後面加上 tag name,也就是那個 p_type,就可以不用重複打同樣的 struct 結構。

這時,我們有第三種方式可以少打 struct 這個字,就是使用 typedef:

typedef struct {
...
} PType;

PType p1;
PType p2;

你會發現到 typedef 會將 struct {...} 以別名(Alias)Ptype 取而代之;之後 Ptype 就是代表 struct {...} 的代名詞。

有一個地方大家可能都會搞混:

typedef struct PType { // 第一個 PType
...
} PType; // 第二個 PType

PType p1;
PType p2;

這裡的 PType p1;PType p2; 是哪一個 PType 發揮效果了呢?答案是第二個 PType;因為 typedef 會將 struct PType {...} 以別名 PType(第二個的)取而代之。

另外一個例子:

typedef struct PType_tag {
...
} PType_alias;

struct PType_tag p1;
PType_alias p2;

這樣有清楚ㄌ嗎


也看看

二元搜尋樹的架構 --- 二元樹與二元搜尋樹系列文章 02

二元樹基本架構 --- 二元樹與二元搜尋樹系列文章 01

二元樹的節點架構 --- 二元樹與二元搜尋樹系列文章 03

Weather Research and Forecasting Model (WRF) Installation Guide on Ubuntu 16.04

Compiling TensorFlow-GPU on Ubuntu 16.04 with CUDA 9.1(9.2) and Python3

二元樹的走訪 --- 二元樹與二元搜尋樹系列文章 08

插入一個節點至二元樹 --- 二元樹與二元搜尋樹系列文章 04

comments powered by Disqus