typedef一个结构体指针变量再去定义一个变量什么意思?
代码如下:typedefstruct_DRIVER_EXTENSION{struct_DRIVER_OBJECT*DriverObject;}*PDRIVER_EXTEN...
代码如下:
typedef struct _DRIVER_EXTENSION
{
struct _DRIVER_OBJECT *DriverObject;
} *PDRIVER_EXTENSION;
PDRIVER_EXTENSION DriverExtension;
请问DriverExtension是一个什么样的变量?和 *PDRIVER_EXTENSION DriverExtension这样定义有没有区别?还是就没有*PDRIVER_EXTENSION DriverExtension这样定义的啊?
谢谢楼下如有朋友的回答,现在我已弄清楚了PDRIVER_EXTENSION DriverExtension;的作用是定义一个DriverExtension的结构体变量。
我还有一个问题:我如果想引用代码中的struct _DRIVER_OBJECT *DriverObject;(补充:DriverObject和DriverExtension一样,也是个结构体变量)。
//------------------------补充代码-------------------------
struct _DRIVER_OBJECT
{
struct _DRIVER_EXTENSION *pDriverExtension;
} ;
//-------------------------------------------------
那DriverExtension->DriverObject=函数地址,这怎么理解? 展开
typedef struct _DRIVER_EXTENSION
{
struct _DRIVER_OBJECT *DriverObject;
} *PDRIVER_EXTENSION;
PDRIVER_EXTENSION DriverExtension;
请问DriverExtension是一个什么样的变量?和 *PDRIVER_EXTENSION DriverExtension这样定义有没有区别?还是就没有*PDRIVER_EXTENSION DriverExtension这样定义的啊?
谢谢楼下如有朋友的回答,现在我已弄清楚了PDRIVER_EXTENSION DriverExtension;的作用是定义一个DriverExtension的结构体变量。
我还有一个问题:我如果想引用代码中的struct _DRIVER_OBJECT *DriverObject;(补充:DriverObject和DriverExtension一样,也是个结构体变量)。
//------------------------补充代码-------------------------
struct _DRIVER_OBJECT
{
struct _DRIVER_EXTENSION *pDriverExtension;
} ;
//-------------------------------------------------
那DriverExtension->DriverObject=函数地址,这怎么理解? 展开
9个回答
展开全部
PDRIVER_EXTENSION DriverExtension;等价于
struct _PDRIVER_EXTENSION DriverExtension;
你会发现
PDRIVER_EXTENSION等价于struct _PDRIVER_EXTENSION
为什么?注意前面的typedef的用法,这时的*PDRIVER_EXTENSION并不是结构体指针变量,而是一个结构体指针类型,DriverExtension才是结构体指针变量
他的定义遵循 <类型> <变量>
typedef的用法,举个简单例子
typedef int AAA
相当于AAA = int,也就是说AAA为int 类型,int a;等价于AAA a;
AAA是int类型,a是int类型变量
那么typedef的意思就是重新定义变量类型的名字
回答补充:
额。。。你还是没理解,因为PDRIVER_EXTENSION是结构体<指针>类型,由他定义的变量为结构体<指针>变量,根结构体变量是两个概念
那DriverExtension->DriverObject=函数地址,这怎么理解?
你没给函数代码,还有部分指针操作代码,但根据你的表达方式可看出,此目标函数的类型为结构体函数指针
又因为指针只能操作地址,结构体成员DriverObject保存了目标函数的地址,相当于DriverObject=函数地址,而结构体指针变量DriverExtension调用结构体成员DriverObject,相当于DriverExtension->DriverObject
也就是说DriverExtension调用了DriverObject保存了函数地址
struct _PDRIVER_EXTENSION DriverExtension;
你会发现
PDRIVER_EXTENSION等价于struct _PDRIVER_EXTENSION
为什么?注意前面的typedef的用法,这时的*PDRIVER_EXTENSION并不是结构体指针变量,而是一个结构体指针类型,DriverExtension才是结构体指针变量
他的定义遵循 <类型> <变量>
typedef的用法,举个简单例子
typedef int AAA
相当于AAA = int,也就是说AAA为int 类型,int a;等价于AAA a;
AAA是int类型,a是int类型变量
那么typedef的意思就是重新定义变量类型的名字
回答补充:
额。。。你还是没理解,因为PDRIVER_EXTENSION是结构体<指针>类型,由他定义的变量为结构体<指针>变量,根结构体变量是两个概念
那DriverExtension->DriverObject=函数地址,这怎么理解?
你没给函数代码,还有部分指针操作代码,但根据你的表达方式可看出,此目标函数的类型为结构体函数指针
又因为指针只能操作地址,结构体成员DriverObject保存了目标函数的地址,相当于DriverObject=函数地址,而结构体指针变量DriverExtension调用结构体成员DriverObject,相当于DriverExtension->DriverObject
也就是说DriverExtension调用了DriverObject保存了函数地址
展开全部
PDRIVER_EXTENSION 相当于struct _DRIVER_EXTENSION * ,
PDRIVER_EXTENSION DriverExtension;等同于
struct _DRIVER_EXTENSION * DriverExtension;
所以DriverExtension是一个指向struct _DRIVER_EXTENSION 结构体的结构体指针变量。typedef 相当于声明了一个新类型,用它就可以声明新的变量。注意typedef 与define的区别,特别是指针方面。
*PDRIVER_EXTENSION DriverExtension这种应该没有。
PDRIVER_EXTENSION DriverExtension;等同于
struct _DRIVER_EXTENSION * DriverExtension;
所以DriverExtension是一个指向struct _DRIVER_EXTENSION 结构体的结构体指针变量。typedef 相当于声明了一个新类型,用它就可以声明新的变量。注意typedef 与define的区别,特别是指针方面。
*PDRIVER_EXTENSION DriverExtension这种应该没有。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
简化之
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则不然!
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则不然!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
typedef struct _DRIVER_EXTENSION
{
struct _DRIVER_OBJECT *DriverObject;
} *PDRIVER_EXTENSION;
上面这样做之后
PDRIVER_EXTENSION相当于是struct _DRIVER_EXTENSION *
定义指针的时候直接写PDRIVER_EXTENSION DriverExtension
相当于是struct _DRIVER_EXTENSION * DriverExtension
所以DriverExtension是指针
{
struct _DRIVER_OBJECT *DriverObject;
} *PDRIVER_EXTENSION;
上面这样做之后
PDRIVER_EXTENSION相当于是struct _DRIVER_EXTENSION *
定义指针的时候直接写PDRIVER_EXTENSION DriverExtension
相当于是struct _DRIVER_EXTENSION * DriverExtension
所以DriverExtension是指针
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
typedef是自定义类型,相当于,用PDRIVER_EXTENSION代替了前面那一串东西,他是一个指针类型是数据,而且是一个结构体类型的指针数据类型,就像int类型一样,只不过他是你自己定义的,而DriverExtension就是一个上面你定义的这种类型的数据,类似于int i,是一样的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询