3 回答

TA貢獻1833條經驗 獲得超4個贊
PDRIVER_EXTENSION 相當于struct _DRIVER_EXTENSION * ,
PDRIVER_EXTENSION DriverExtension;等同于
struct _DRIVER_EXTENSION * DriverExtension;
所以DriverExtension是一個指向struct _DRIVER_EXTENSION 結構體的結構體指針變量。typedef 相當于聲明了一個新類型,用它就可以聲明新的變量。注意typedef 與define的區別,特別是指針方面。
*PDRIVER_EXTENSION DriverExtension這種應該沒有。

TA貢獻1820條經驗 獲得超9個贊
簡化之
typedef struct st{ int i; }*pst;
pst a, b; 等于 struct st * a; struct st * b; b依然是結構指針!
還可以定義 pst * c; 等于struct st ** c;
但無 *pst c; 寫法
區別于
#define pst struct st{ int i; }*
pst a, b; 等于 struct st *a; struct st b; b是結構變量,不再是結構指針了!
結論:#define只進行簡單的替換,typedef則不然!

TA貢獻1846條經驗 獲得超7個贊
typedef struct _DRIVER_EXTENSION
{
struct _DRIVER_OBJECT *DriverObject;
} *PDRIVER_EXTENSION;
上面這樣做之后
PDRIVER_EXTENSION相當于是struct _DRIVER_EXTENSION *
定義指針的時候直接寫PDRIVER_EXTENSION DriverExtension
相當于是struct _DRIVER_EXTENSION * DriverExtension
所以DriverExtension是指針
添加回答
舉報