有人可以請解釋下面的代碼。我是C新手,並試圖找出答案。爲什麼我們最後有queueNodeT?C語言和隊列/鏈表
typedef char queueElementT;
typedef struct queueNodeTag {
queueElementT element;
struct queueNodeTag *next;
} queueNodeT;
有人可以請解釋下面的代碼。我是C新手,並試圖找出答案。爲什麼我們最後有queueNodeT?C語言和隊列/鏈表
typedef char queueElementT;
typedef struct queueNodeTag {
queueElementT element;
struct queueNodeTag *next;
} queueNodeT;
queueNodeT是typedef語句嘗試創建的類型的名稱。
指定此的另一種方法是:
struct queueNodeTag {
...
};
typedef struct queueNodeTag queueNodeT;
在C(相對於C++), 「結構queueNodeTag」 剛剛定義了一個名爲 「queueNodeTag」 結構。在C++ [你到達那裏],這也將定義一個名爲「queueNodeTag」型
當創建一個指針變量的結構,這是略短的使用方法:
queueNodeT *my_pointer;
比:
struct queueNodeTag *my_pointer;
結尾的「T」只是一個編碼約定,表示它是一個類型名稱而不是變量。你可以使用他人。我的是:
struct mystructname {
...
};
typedef struct mystructname mystructname_t;
typedef mystructname_t *mystructname_p;
使用mystructname_p,您可以更改:
struct mystructname *my_pointer;
mystructname_t *my_pointer;
到:
mystructname_p my_pointer;
的 「_t」 是相當普遍的。 「_p」是我的約定,但是,我相信其他約定會將類型的指針定義爲「p < Mytype>」,例如「pMystructName」。我更喜歡在這個例子中使用後綴[和「蛇案」符號,而不是你的例子中的「駱駝駝峯」符號]。
讓我們逐個分解。
此行只是告訴你queueElementT
在這裏定義爲char
。意思是你可以寫queueElementT
或char
,兩者都可以。
typedef char queueElementT;
現在這裏是實際的struct
。它包含兩個變量,即它所持有的元素,在本例中爲char
。然後它還會告知queue
中的下一個元素。
typedef struct queueNodeTag {
queueElementT element;
struct queueNodeTag *next;
} queueNodeT;
更多可讀於this解答。
演示:
int count (queueNodeTag q) {
int i = 0;
if (q == null) {
return 0;
}
if (q.next == null) {
return 1;
}
while (q.next != null) {
q = q.next;
i++;
}
return i;
}
三起案件來處理。
q
是null
,該queue
是空的。返回0.q.next
是null
,queue
只包含一個元素。返回1.q.next
與null
分開,增量爲i
,因爲我們走了。我更好的名字可能是elements
或類似的東西。此代碼未經測試,因爲我目前沒有C編譯器。有人提供一個可能可以驗證沒有犯下錯誤?
謝謝!我正在嘗試代碼 –
這就是'typedef'。它爲struct結合了一個'struct'聲明和一個typedef名字。 –
'typedef'聲明爲一個類型聲明一個別名。在這種情況下'queueElementT'被聲明爲'char'的別名。此外,'queueNodeT'被聲明爲'struct queueNodeTag'的別名,'struct queueNodeTag'被進一步定義爲具有指定成員的'struct'。 –