函数指针的问题

TODD911 2011-02-22 10:34:58
关于函数指针的问题,不明白下面2个程序为什么执行的结果是一样的?

程序1:
[code=C]/C++
#include<stdio.h>
int max(int x,int y){ return(x>y?x:y); }
int main()
{
int (*ptr)(int, int);
int a,b,c;
ptr=max;
scanf("%d%d",&a,&b);
c=(*ptr)(a,b); //就这行和下面的程序不一致。
printf("a=%d,b=%d,max=%d",a,b,c);
return 0;
}
[/code]


关于函数指针的问题,不明白为什么执行的结果是一样的?

程序2:
[code=C]/C++
#include<stdio.h>
int max(int x,int y){ return(x>y?x:y); }
int main()
{
int (*ptr)(int, int);
int a,b,c;
ptr=max;
scanf("%d%d",&a,&b);
c=ptr(a,b);
printf("a=%d,b=%d,max=%d",a,b,c);
return 0;
}
[/code]

为什么上面2个程序执行的结果是一样的?我在程序里面print ptr 和 *ptr ,这2个的值是一样的,请问这边是*的作用是什么?解引用吗?
谢谢各位了!




...全文
185 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
robinyeung 2011-02-22
  • 打赏
  • 举报
回复
编译器 知道 ptr是个指针,并会去调用被指的函数!
也就是说 ,可以不写从指针得到函数的间接运算"*",同时你发现赋值后面右边 "&" 也省略掉了.
(C++程序设计语言的描述)
pengzhixi 2011-02-22
  • 打赏
  • 举报
回复
ptr(a,b);是通过函数指针调用函数的一种简写。和(*ptr)(a,b);是等价的。
jackiesen 2011-02-22
  • 打赏
  • 举报
回复
Ptr表示max()函数首地址。*ptr表示值,两个实际上值指向同一的地方。就好像Ptr是门牌号,而*Ptr是这家的主人。实际上是指向同一个人的。
mtj530 2011-02-22
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 yywbingo 的回复:]
ptr表示函数地址,
(*ptr)表示内容了,函数的指针是不能像这样用的
[/Quote]
+1
yywbingo 2011-02-22
  • 打赏
  • 举报
回复
ptr表示函数地址,
(*ptr)表示内容了,函数的指针是不能像这样用的
muku9527 2011-02-22
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 zhao4zhong1 的回复:]
VC调试时按Alt+8,TC或BC用TD调试,打开汇编窗口看每句C对应的汇编不就啥都明白了吗。
(Linux或Unix下应该也可以在用GDB调试时,看每句C对应的汇编。)
想要从本质上理解C指针,必须学习汇编以及C和汇编的对应关系。
从汇编的角度理解和学习C语言的指针,原本看似复杂的东西就会变得非常简单!
[/Quote]
我用的是C-FREE 怎么看汇编代码?
muku9527 2011-02-22
  • 打赏
  • 举报
回复
10楼犀利,很强大。
pathuang68 2011-02-22
  • 打赏
  • 举报
回复
sillior 2011-02-22
  • 打赏
  • 举报
回复
建议看看《C和指针》13章13.3节
解释的很清楚
函数指针的初始化表达式中 &符是可选的 非必须
因为函数名被使用时总是有编译器转换成函数指针
函数调用时 *也是可选的
如f()这样的函数调用函数名也会被隐式转换成函数指针
而(*pf)()这样的指针间接访问 得到函数名后也会隐式转换为函数指针
pf()这样的调用方式 效果和上述两种效果一样
赵4老师 2011-02-22
  • 打赏
  • 举报
回复
VC调试时按Alt+8,TC或BC用TD调试,打开汇编窗口看每句C对应的汇编不就啥都明白了吗。
(Linux或Unix下应该也可以在用GDB调试时,看每句C对应的汇编。)
想要从本质上理解C指针,必须学习汇编以及C和汇编的对应关系。
从汇编的角度理解和学习C语言的指针,原本看似复杂的东西就会变得非常简单!

69,371

社区成员

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

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