关于结构体指针问题,还有函数指针作为结构体成员的问题

struct fb_info{
chsr modename[40];
...
...
int(*changvar)(int);
int(*switch_con)(int,struct fb_info*);
int(*updatevar)(int,struct fb_info*);
}
我的问题是if(fb_info.changevar) //表达了什么意思
(*fb_info.changevar)(con); //*fb_info.changevar 的解释
能不能给我解释一下这个if 语句
谢谢大家

int(*changevar)(int);//你少些了个e

这是一个函数指针,这个changevar指针指向一个这样的函数:这个函数有一个int型参数,返回值也是int.所以if(fb_info.changevar) 的意思就是判断结构体fb_info中的changevar是否为空,等同于if(fb_info.changevar==NULL) .
而(*fb_info.changevar)(con)就是用changevar调用一个con函数了,con函数也是一个只有一个int参数,返回值是int的函数,此时 结构体fb_info的函数指针changevar指向con这个函数。就和普通的变量指针指向一个变量的意思一样的。
希望对你有帮助!追问

我刚才的问题描述不准确
fb_info.charevar 解释一下是不是这样 charvevar是指向一个函数入口地址的指针
如何charevar又是fb_info结构体的成员 所以fb_info.charevar 是一个指针

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-07-19
int(*changvar)(int);

changvar表示指向函数的指针
该函数指针存放的是一个函数的首地址
假如该函数指针为空表示没有对应的函数
如果赋值了的话,那么就可以调用
(*fb_info.changevar)(con); 就是调用该函数
第2个回答  2012-07-19
int(*changvar)(int); //这是个函数指针,可以指向有一个int参数并且返回int的函数

if(fb_info.changevar) //这个意思是if(fb_info.changevar!=0)

(*fb_info.changevar)(con); //以con为参数,执行changver指向的函数
第3个回答  2012-07-19
if (fb_info.changevar),等价于if (fb_info.changevar != NULL)

(*fb_info.changevar)(con)的意思是调用这个函数

这个结构是用C实现的对象封装,如果你学过C++就很容易理解了
这些函数指针相当于这个对象的一些方法函数
第4个回答  2012-07-19
fb_info.changevar是函数指针,在判断中是用来判断这个指针是否已经被指定了函数;如果没有初始化,则不确定指针的内容,使用时会报错;如果指定为0,则表明不指向任何函数;所以这里的判断是等价于if (fb_info.changevar != NULL),只能判定有没有指向0;
(*fb_info.changevar)(con)是调用函数,等价于 fb_info.changevar(con);
第5个回答  2012-07-19
我擦·· 太高深

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网