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

structfb_info{chsrmodename[40];......int(*changvar)(int);int(*switch_con)(int,structf... 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 语句
谢谢大家
展开
 我来答
雪豹出击
2012-07-19 · TA获得超过642个赞
知道小有建树答主
回答量:131
采纳率:0%
帮助的人:47.7万
展开全部
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 是一个指针
秋风扫走廊
2012-07-19 · TA获得超过590个赞
知道小有建树答主
回答量:665
采纳率:100%
帮助的人:315万
展开全部
int(*changvar)(int);

changvar表示指向函数的指针
该函数指针存放的是一个函数的首地址
假如该函数指针为空表示没有对应的函数
如果赋值了的话,那么就可以调用
(*fb_info.changevar)(con); 就是调用该函数
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lsslddd
2012-07-19 · TA获得超过936个赞
知道小有建树答主
回答量:374
采纳率:0%
帮助的人:424万
展开全部
int(*changvar)(int); //这是个函数指针,可以指向有一个int参数并且返回int的函数

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

(*fb_info.changevar)(con); //以con为参数,执行changver指向的函数
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
rm_2013
2012-07-19 · TA获得超过459个赞
知道小有建树答主
回答量:281
采纳率:100%
帮助的人:166万
展开全部
if (fb_info.changevar),等价于if (fb_info.changevar != NULL)

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

这个结构是用C实现的对象封装,如果你学过C++就很容易理解了
这些函数指针相当于这个对象的一些方法函数
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
自由翱翔海阔天空
2012-07-19 · TA获得超过316个赞
知道小有建树答主
回答量:282
采纳率:0%
帮助的人:135万
展开全部
fb_info.changevar是函数指针,在判断中是用来判断这个指针是否已经被指定了函数;如果没有初始化,则不确定指针的内容,使用时会报错;如果指定为0,则表明不指向任何函数;所以这里的判断是等价于if (fb_info.changevar != NULL),只能判定有没有指向0;
(*fb_info.changevar)(con)是调用函数,等价于 fb_info.changevar(con);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
粪斗小石头
2012-07-19
知道答主
回答量:1
采纳率:0%
帮助的人:1606
展开全部
我擦·· 太高深
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式