完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
这三个程序都是可以运行的(用VS2012编译),请问他们的区别在哪里呢?该如何理解
1 #include typedef void (*fun)(void); void show(void) { printf("I am show!n"); } void main() { fun ptr; ptr=show; ptr(); } 2 #include typedef void (*fun)(void); void show(void) { printf("I am show!n"); } void main() { fun ptr; ptr=&show; (*ptr)(); } 3 #include typedef void (*fun)(void); void show(void) { printf("I am show!n"); } void main() { fun ptr; ptr=show; (*ptr)(); } |
|
相关推荐
21个回答
|
|
按照&运算符本来的意义,它要求其操作数是一个对象,但函数名不是对象(函数是一个对象),本来&show是非法的,但很久以前有些编译器已经允许这样做,
c/c++标准的制定者出于对象的概念已经有所发展的缘故,也承认了&show的合法性。 因此,对于show和&show你应该这样理解,test是函数的首地址,它的类型是void (),&show表示一个指向函数show这个对象的地址, 它的类型是void (*)(),因此show和&show所代表的地址值是一样的,但类型不一样。show是一个函数,&show表达式的值是一个指针! |
|
|
|
|
|
定义一个函数指针类型。
比如你有三个函数: void hello(void) { printf("你好!"); } void bye(void) { printf("再见!"); } void ok(void) { printf("好的!"); } typdef void (*funcptr)(void); 这样就构造了一个通用的函数 你用的时候可以这样: void speak(int id) { funcptr words[3] = {&hello, &bye, &ok}; funcptr fun = words[id]; (*fun)(); } 这样的话,如果speak(0)就会显示“你好!” speak(1)就会显示“再见!” speak(2)就会显示“好的!” 用于处理参数和返回值的形式都一样,但是功能不确定的一组函数,可以使用函数指针。 比如算术运算符,加、减、乘、除,都可以用typedef int (*calc)(int,int)代表,等等 |
|
|
|
请看清楚问题,我的问题是:
ptr=show;ptr();或者ptr=&show;(*ptr)();或者 ptr=show;(*ptr)(); 三个都可以运行。区别在哪 |
|
|
|
1.函數名稱跟數組名稱本來就代表起始位址了,函數或數組名前面加不加&都是一樣的
2.ptr()跟(*ptr)()一樣,就不知道為啥了...這邊函數名稱好像對*沒反應 (******ptr)()一樣可以調用呢 |
|
|
|
一个人名字的不同3种叫法。。。比如说:小明,明明。。。
|
|
|
|
你先理解这一句,typedef void (*fun)(void); 再说下面的,
|
|
|
|
第二个和第三个可以理解,第一个对吗??????????? 你换个编译器试下就知道了!!
|
|
|
|
哈哈,说了亲测可用。不论是VC6.0还是VS2012还是Free Online IDE,三个都是正确的
|
|
|
|
或者说是可以执行的,也许编译器做了什么处理吧
|
|
|
|
讲真,函数名就是该函数的地址,把它的值赋给一个指向函数的指针是没问题的,相反ptr=&show反而有点不好理解。
|
|
|
|
|
|
|
|
http://bbs.csdn.net/topics/310105530
这里有一篇帖子,说的有点意思 大意是 按照&运算符本来的意义,它要求其操作数是一个对象,但函数名不是对象(函数是一个对象),本来&test是非法的,但很久以前有些编译器已经允许这样做,c/c++标准的制定者出于对象的概念已经有所发展的缘故,也承认了&test的合法性。 |
|
|
|
只是没说 (*ptr);(*******ptr);估计也是被这样类似的处理了吧
|
|
|
|
所以不知道你(*ptr)(); 哪來看來的... 還是自己亂寫的?
|
|
|
|
(*ptr)() 这个是正确的。 看看下面这个图片,是谭浩强的C语言
|
|
|
|
|
|
是,这个也是最容易接受的
|
|
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
请问下图大疆lightbridge2遥控器主板电源芯片型号是什么?
4439 浏览 1 评论
使用常见的二极管、三极管和mos做MCU和模组的电平转换电路,但是模组和MCU无法正常通信,为什么?
311浏览 2评论
为了提高USIM卡电路的可靠性和稳定性,在电路设计中须注意的点有哪些?
295浏览 2评论
311浏览 2评论
310浏览 2评论
352浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 02:43 , Processed in 1.143307 second(s), Total 115, Slave 97 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号