uj5u.com熱心網友回復:
這個底下漏了#define _LIST_H這是為了防止重復包含造成的重復定義錯誤,加入a.c包含a.h b.h,而a.h又包含b.h,這樣在a.c中,b.h被包含了兩次,采用這個宏定義的時候,第二次包含進去,因為有了宏定義而使#if #endif陳述句塊失效
uj5u.com熱心網友回復:
這個我知道,我想問一下當中的變數定義怎樣回事,是不是偽代碼?
uj5u.com熱心網友回復:
你對于偽代碼的含義恐怕有所誤解,偽代碼的意思是,用一種代碼來表達一種演算法或者程序,而這種代碼一般是現實中不存在的,你提供的這些代碼是C語言,明確地顯示一種實作方式,它就不會是偽代碼。
再有,要把宣告和定義區分開,宣告是宣布一種型別的存在,一般情況下,不體現細節。好比你這里面的“struct Node;”,它是一種宣告,struct里面的成員并不在這里體現出來,當我們只是用到指標或者參考的時候,這種細節并不是必要的。這樣的做法的好處就是隱藏細節,符合OOP的精神。
而定義就是明確型別的內容部分(對于struct或class就是成員),且定義只能在一處進行,所以重復包含就會出錯。當你是參考了定義以后,類似new操作就能進行的,因為new操作需要知道需要給要給實體分配多大的記憶體空間,而如果是宣告的話,就不可以new了。
至于typedef,你可以把它理解成為一個同義詞定義,形如“typedef a b;”等于是b是a的同義詞,但這個a必須是宣告或者定義過的。在上面那段代碼里面,先宣告“struct Node;”,然后“typedef struct Node *PtrToNode;”,就是說,“PtrToNode”是“typedef struct Node *”的同義詞。
初學者很容易被這種格式迷惑,比如,當你宣告一個函式的時候,一般是這樣的:
int fun(int, const char *);
那么函式(指標)型別的同義詞應該怎么定義呢?又怎么看這樣的結構呢?看下面這個式子:
typedef int (*funptr)(int, const char *);
像這樣的形式,一種小技巧就是先把識別符號找出來,這個式子里面就是funptr,然后再把括號里面的內容用fun來還原,這樣就回到上面那個函式宣告:
int fun(int, const char *);
說明funptr和fun屬于同型別的,這樣的話,就可以進行賦值了,“funptr = fun;”,于是之后的場合,可以用funptr來替代fun執行函式功能,比如:int res = funptr(100, "china");
uj5u.com熱心網友回復:
不好意思,剛才碼字比較多,最后一部分寫的有問題。我重新更正一下。要把宣告和定義區分開,宣告是宣布一種型別的存在,一般情況下,不體現細節。好比你這里面的“struct Node;”,它是一種宣告,struct里面的成員并不在這里體現出來,當我們只是用到指標或者參考的時候,這種細節并不是必要的。這樣的做法的好處就是隱藏細節,符合OOP的精神。
而定義就是明確型別的內容部分(對于struct或class就是成員),且定義只能在一處進行,所以重復包含就會出錯。當你是參考了定義以后,類似new操作就能進行的,因為new操作需要知道需要給要給實體分配多大的記憶體空間,而如果是宣告的話,就不可以new了。
至于typedef,你可以把它理解成為一個同義詞定義,形如“typedef a b;”等于是b是a的同義詞,但這個a必須是宣告或者定義過的。在上面那段代碼里面,先宣告“struct Node;”,然后“typedef struct Node *PtrToNode;”,就是說,“PtrToNode”是“typedef struct Node *”的同義詞。
初學者很容易被這種格式迷惑,比如,當你宣告一個函式的時候,一般是這樣的:
int fun(int, const char *);
那么函式(指標)型別的同義詞應該怎么定義呢?又怎么看這樣的結構呢?看下面這個式子:
typedef int (*funptr)(int, const char *);
像這樣的形式,一種小技巧就是先把識別符號找出來,這個式子里面就是funptr,然后再把括號里面的內容用fun來還原,這樣就回到上面那個函式宣告:
int fun(int, const char *);
說明funptr和fun屬于同型別的,這樣的話,就可以進行賦值了,“funptr f1 = fun;”,于是之后的場合,可以用f1來替代fun執行函式功能,比如:int res = f1(100, "china");
另外,“funptr f1;”與下列寫法等價,當更簡潔:
int (*f1)(int, const char *);
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/27573.html
標籤:數據庫及相關技術
上一篇:萌新求解
