c语言函数指针问题

Apple_____ 2012-05-31 12:03:15
c语言的函数指针有什么用处吗?
还有
int (*fp)(void) = f;
*fp();//这样通过函数指针调用函数对吗??
fp();//这种与上一种有什么区别??(fp是一个指针,直接写fp这种比较难理解,我感觉*fp较好理解)
...全文
253 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
huibianyuyan123123 2012-06-02
  • 打赏
  • 举报
回复
应该是fp();*fp()是对它解引用了
fp()和 (*fp)()两种写法都可以,这个是C语言语法上的容错处理,类似于
int a[10]// 这样a 和 &a 是完全等同的,这是语法容错

*fp(),这种写法的意思是调用fp(),然后对结果解引用, 对一个int解引用会出错...
函数()结合的优先级高于解引用*
Apple_____ 2012-06-02
  • 打赏
  • 举报
回复
a ^= b ^= a ^= b;//这是怎样实现两数交换的???
  • 打赏
  • 举报
回复
顶5楼
proorck6 2012-05-31
  • 打赏
  • 举报
回复
函数指针,可以,把函数名当参数传递给另一个函数。
diaolingle 2012-05-31
  • 打赏
  • 举报
回复
调用指针函数直接用fp()就行了。
DataChat.Club 2012-05-31
  • 打赏
  • 举报
回复
没啥区别

[Quote=引用 6 楼 的回复:]

我想问的是通过函数指针调用函数
加*与不加*的区别
fp();

(*fp)();
的区别
[/Quote]
DataChat.Club 2012-05-31
  • 打赏
  • 举报
回复
*fp() 是 *(fp指向的函数的返回的指针)
Apple_____ 2012-05-31
  • 打赏
  • 举报
回复
我想问的是通过函数指针调用函数
加*与不加*的区别
fp();

(*fp)();
的区别
DataChat.Club 2012-05-31
  • 打赏
  • 举报
回复
*fp();//这样通过函数指针调用函数对吗??

是不是(*fp)()?
Apple_____ 2012-05-31
  • 打赏
  • 举报
回复
我这两种都是用函数指针。
函数名是 f
fp是函数指针名
W170532934 2012-05-31
  • 打赏
  • 举报
回复
两种写法都是调用函数。使用函数指针比较灵活。比如你可以把函数指针作为参数传递等等
Apple_____ 2012-05-31
  • 打赏
  • 举报
回复
是(*fp)();//为什么*fp();不行呢??
quwei197874 2012-05-31
  • 打赏
  • 举报
回复
应该是fp();*fp()是对它解引用了
giant7 2012-05-31
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 的回复:]
fp()和 (*fp)()两种写法都可以,这个是C语言语法上的容错处理,类似于
int a[10]// 这样a 和 &a 是完全等同的,这是语法容错

*fp(),这种写法的意思是调用fp(),然后对结果解引用, 对一个int解引用会出错...
函数()结合的优先级高于解引用*
[/Quote]

++1
windyfox 2012-05-31
  • 打赏
  • 举报
回复
15楼顶一下
lyqf365 2012-05-31
  • 打赏
  • 举报
回复
fp()和 (*fp)()两种写法都可以,这个是C语言语法上的容错处理,类似于
int a[10]// 这样a 和 &a 是完全等同的,这是语法容错

*fp(),这种写法的意思是调用fp(),然后对结果解引用, 对一个int解引用会出错...
函数()结合的优先级高于解引用*
xuyinglin 2012-05-31
  • 打赏
  • 举报
回复
还真没注意过
木偶兄 2012-05-31
  • 打赏
  • 举报
回复
看看这个,http://blog.pfan.cn/whyhappy/6030.html
handsomekyle 2012-05-31
  • 打赏
  • 举报
回复
楼主。。好好看看书吧。这些的解释书上都有的。
石头翔子 2012-05-31
  • 打赏
  • 举报
回复

int test_func()
{
return 100;
}

int main(int argc, char *argv[])
{
int (*p)() = test_func;
//测试发现,printf中的最后一个参数,用p,或者*p,或者**p,其反汇编的结果完全一致
printf("value of p is : 0x%x, **p is : 0x%x\n", p, **p);
return 0;
}




测试发现,printf中的最后一个参数,用p,或者*p,或者**p,其反汇编的结果完全一致
加载更多回复(4)

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧