結構體巢狀結構體名

2021-06-03 11:28:03 字數 1179 閱讀 4532

**:

結構體巢狀結構體名

前一段時間在看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...