**:
結構體巢狀結構體名
前一段時間在看ddk中例子的時候,看到這樣的的結構體定義:
typedef struct _common_device_data
common_device_data, *pcommon_device_data;
typedef struct _pdo_device_data
pdo_device_data, *ppdo_device_data;
typedef struct _fdo_device_data
fdo_device_data, *pfdo_device_data;
這裡的結構體定義方法看起來好像是定義乙個基類,然後在基類上擴充套件出兩個子類。
這樣的做法與平常的結構體巢狀結構體不同,因為在結構體中只有另外的結構體的名字,如pdo_device_data結構體中只有common_device_data結構體名,而不是成員變數。這種寫法在vc6.0中可以通過編譯,在gcc中不能通過編譯,因此我猜想可能微軟擴充套件了c的語法,這種寫法不是標準c的做法。
接下來,我寫下面的例子程式來**這種定義結構體的方法。
在base.h中定義了三個結構體,base、ext1、ext2。ext1和ext2中都有base結構體名。發現巢狀了結構體名(base)的結構體(ext1和ext2)的長度是sizeof(base)+其它成員的長度。ext1結構體指標可以直接訪問base結構體的成員,且ext1結構體指標可以強制轉換成base結構體指標。
/* base.h */
#include
#include
typedef unsigned char boolean;
typedef unsigned long ulong;
typedef void void;
#define false 0;
#define true ~0;
typedef struct _base
base, *pbase;
typedef struct _ext1
ext1, *pext1;
typedef struct _ext2
ext2, *pext2;
void teststruct()
else}
/* main.c */
#include "base.h"
int main()
結構體中巢狀結構體
結構體的巢狀問題 結構體的自引用 self reference 就是在結構體內部,包含指向自身型別結構體的指標。結構體的相互引用 mutual reference 就是說在多個結構體中,都包含指向其他結構體的指標。1.1不使用typedef時 錯誤的方式 struct tag 1 這種宣告是錯誤的,...
結構體巢狀結構體 C語言結構體
希望今年夏天的遺憾能成為你秋天的驚喜。網易雲熱評 一 結構體概念 可以簡單理解為把不同資料型別放到一起的陣列 二 結構體宣告與初始化 1 先宣告結構體型別再定義變數 2 同時定義變數 3 直接定義結構體型別變數 include include include include struct aiyou...
巢狀結構體案例
這個案例還是有很多地方可以學習的,決定記錄一下 參考 黑馬程式設計師匠心之作 c 教程從0到1入門程式設計 include include include include using namespace std 定義結構體 struct student struct teacher 賦值函式 voi...