關於typedef和struct使用過程中的一些思考(2020/12/23更新)
關於typedef和struct使用過程中的一些思考
以下內容所記錄的內容是自己在編寫ADT工具類時遇到的問題,做出一些記錄,好記性不如爛筆頭
以下內容如有錯誤的地方還望不吝賜教
1、C與C++中關於typedef
和struct
的使用辨析:
題目案例1:C中定義結構體型別(簡潔版 少寫了類名)
typedef struct {
···
}Sqlist, Linklist, SqStack;
注意:
需要說明的是 在此處
Sqlist, Linklist, SqStack
都是同一種資料型別,宣告變數用其中任何一個都可以 在C++中也可以使用上述案例1中的方法來定義結構體型別 (使用案例1的方法更多的是為了與C語言同步,因為案例2中C++可以用更簡便的方法來定義結構體型別)
題目案例2: C++中的struct可以單獨定義一個結構體型別
struct Box {
···
};
//Box是一個結構體型別
C++ 中可以直接使用struct {···} box1;
來定義一個結構體變數,通過struct Box {```} ;
來定義一個結構體型別
C中則必須借用 typedef
才可以直接使用struct
來定義結構體型別 (正如題目案例1所表示的那樣),但是這樣也會存在問題(少寫了一個類名當然會存在問題,“大約記得好像是最多隻能在函式中定義一個結構體變數,定義多個結構體變數會導致報錯”,有錯誤的地方希望有名大佬能點撥一下,十分感激)呃 扯遠了 標準格式見題目案例3
題目案例3: C中定義結構體型別(完整版 )
typedef struct Box {
······
}Box;//Box此時可以單獨作為一個結構體型別
經驗總結:
直接對struct起別名 說明這個節點在這個函式中只會被定義一次例如順序結構
對struct LNode起別名 說明相同型別的結點可以被定義很多個 例如鏈式結構的結點
typedef struct {
QElemType *Data;
Position Front;
Position Rear;
QElemType QueueSize;
}QNode;
// 直接對struct起別名 說明這個節點在這個函式中只會被定義一次
typedef struct LNode {
ElemType Data;
···
ElemType Maxsize;
}LNode, *PtrToLNode;
// 對struct LNode起別名 說明相同型別的結點可以被定義很多個
2、編寫 Queue ADT時 的隨筆
typedef QNode * PtrToQNode;
這種寫法一般只用於鏈式結構,因為只有鏈式結構才會用到這如此類的Ptr···
的指標名
這一步操作其實常在鏈式結構的儲存結構定義中出現 當然在順式結構中使用不規範
線性鏈式結構的定義:
typedef struct LNode {
···
···
}LNode, *LinkList;
完成了以下幾步操作:
typedef struct LNode LNode
;
typedef struct LNode * LinkList
;
terminal:10~22
在malloc開闢空間時 第一種QNode
是一種單獨的資料結構 struct QNode
則不是 ,第二種 Struct QNode
和QNode
都是是一種單獨的資料結構
typedef int Position;
typedef int QElemType;
typedef int Status;
-----------------------------------------------------------------
typedef struct QNode * Queue;
// 以下兩種寫法 在malloc開闢空間時 第一種QNode是一種單獨的資料結構 struct QNode則不是
// 第二種 Struct QNode 和QNode 都是是一種單獨的資料結構
typedef struct {
QElemType *Data;
Position Front;
Position Rear;
QElemType QueueSize;
}QNode;
typedef struct QNode {
QElemType *Data;
Position Front;
Position Rear;
QElemType QueueSize;
}QNode;
-----------------------------------------------------------------
// 以下兩種資料結構型別的定義
// 直接對struct起別名 說明這個節點在這個函式中只會被定義一次
typedef struct LNode {
QElemType *Data;
Position Front;
Position Rear;
QElemType QueueSize;
}LNode, *PtrToLNode;
// 對struct LNode起別名 說明相同型別的結點可以被定義很多個
Queue InitQueue(int MaxSize) ;
int GetQueueLength(Queue Q);
bool EnQueue(Queue Q, QElemType X);
QElemType DeQueue(Queue Q);
void TravelQueue(Queue Q);
-----------------------------------------------------------------
開闢malloc
時遇到的問題
Queue InitQueue(int MaxSize) {
++MaxSize;
Queue newNode = (struct QNode *)malloc(sizeof( QNode));
// 此處報錯不允許使用不完整的資料型別····(struct QNode)不可以???
// 這個地方對LNode起了別名了 ··但之前的按理說應該也可用呀
//經分析可知這裡的這裡的原因是typedef <Nonname> QNode
// struct在此處既是關鍵字又是QNode的隱式別名(不可以被引用) 出現歧義在此處就不可以出現了 只可以使用QNode作為這個結構體唯一的名字
// 與此同時造成的其他影響是 這個隱式別名為`struct`的QNode結點只可以程式的執行過程中執行一次 只可以出現一個名為“QNode”的結點
}
相關文章
- 關於typedef在struct使用上的一些問題Struct
- struct和typedef struct 有什麼不同呢?Struct
- typedef and struct inside class definition?StructIDE
- 關於DDD和COLA的一些總結和思考
- 關於CodeReview的一些思考View
- 關於2021年的一些收穫和思考
- 2020-12-23Monkey使用
- 關於 Masonry 的一些思考(下)
- 關於React中動畫不生效的一些思考React動畫
- 學習遊戲拆解過程中的一些思考與感悟遊戲
- 關於react-native-image-picker使用過程中的坑React
- 學習和使用 Vue 過程中的一些資源分享Vue
- iOS關於換膚和夜間模式的一些思考iOS模式
- 關於賬號安全的一些思考
- 關於PHP協程與阻塞的思考PHP
- 2020年的一些思考和總結
- Filebeat和logstash 使用過程中遇到的一些小問題記錄
- 2020-12-23
- 關於在Interface和Abstract Class間選擇的一些思考
- 關於前端工程化(基建)的一些總結和思考前端
- 關於作業系統的一些思考作業系統
- 關於REACT正規化的一些思考React
- 關於 12306 售票的一些思考研究
- 關於aspnetcore中介軟體的一些思考NetCore
- 關於微服務劃分的一些思考微服務
- 關於Code Review的一些思考總結View
- 關於近源滲透的一些思考
- 關於Fork和Malloc的思考
- 關於Golang struct{}{}用法和注意事項GolangStruct
- js中new關鍵字的使用過程JS
- 23. 使用MySQL之使用儲存過程MySql儲存過程
- 關於許可權系統的一些思考
- 關於研發規範化的一些思考
- 近期關於快取設計的一些思考快取
- 關於RxJava在業務上的一些思考RxJava
- Docker實踐過程中遇到的一些問題總結(持續更新中)Docker
- 直播系統開發過程中的一些關鍵點
- c3p0使用過程中的一些疑惑