能力值:
( LV2,RANK:10 )
2 楼
不会吧,没分就没人给讲一下了……
S大大,zapline,紧急呼叫……
能力值:
( LV9,RANK:180 )
3 楼
快转正了.
1. 问问题不要点点兵
你点点兵, 兵又不会. 这样我很郁闷.
能力值:
( LV2,RANK:10 )
4 楼
是不是使用pf指针时是使用里面的值,相当于call eax(eax=0x410000) 这样;使用(*pf)时,根据优先级先取值,相当于 call 0x410000 这样的。然后编译器里面有优化处理,结果就变成一样的了?cout那里肯定是这个原理。
能力值:
( LV2,RANK:10 )
5 楼
反汇编之后看,结果两者居然一模一样……都是这样的:
push 0
push xxxxxxxx
push xxxxxxxx
push 0
call [ebp-4]
但是 pf 和 *pf 怎么可能会一样呢?
能力值:
( LV2,RANK:10 )
6 楼
额,大大,sry,我不是点兵,是点将……嘿嘿
大大来了可以给帖子增加亮点,增加人气嘛。
能力值:
( LV2,RANK:10 )
7 楼
专业加人气的路过
能力值:
( LV9,RANK:490 )
在线值:
8 楼
补充:
你没点的兵来了,他会,这样我更郁闷! 还好我也不会!
能力值:
( LV2,RANK:10 )
9 楼
汗。。。
那我以后就都写(*pf)()这种方式好了,这样可以很明显的看出来是使用了函数指针,pf()这样写,别人还以为是函数呢
能力值:
( LV2,RANK:10 )
10 楼
额,真不是点兵,是求救啊……就是不想被误会被点兵,所以才没加到标题或者正文里,专门在2L新开了一片地喊救命……结果还是做错了,我有罪
能力值:
( LV2,RANK:10 )
11 楼
[QUOTE=xiilin;762234]反汇编之后看,结果两者居然一模一样……都是这样的:
push 0
push xxxxxxxx
push xxxxxxxx
push 0
call [ebp-4]
但是 pf 和 *pf 怎么可能会一样呢?[/QUOTE]
pf 和 *pf 当然不一样了,*是一个运算,但是编译器应该会进行一些优化处理,这里就直接把*的取值运算省略了,他call [ebp-4],应该是用pf, 如果是call [ebp-4]里面的值应该对应*pf,但是那样可能比较死板吧。 int a=3;#define b 3, int a=b;他们在c层面是不一样的,但是宏替换后就都是int a=3;了。 这里只是在从c到机器码时优化了一下,我猜的。
能力值:
( LV2,RANK:10 )
12 楼
哈哈,我终于知道了!!
pf()这种用法是C++的标准用法,(*pf)()是C的用法,为了兼容,在C++里也可以这样用。
但是VC6实在太邪恶了,即使在C文件里,用pf()居然也没报错,连警告都没有……所以在VC6下两者是一样的……
好了,睡觉,哈哈,晚安~
PS:为啥现在打开论坛总是会出现“502 Bad Gateway”,然后必须刷新几次才能打开页面?
能力值:
( LV2,RANK:10 )
13 楼
我也是刷了好几遍才进得来
能力值:
( LV2,RANK:10 )
在线值:
14 楼
搞了半天是这样啊。话说我C++没学过。不清楚。
能力值:
( LV2,RANK:10 )
在线值:
15 楼
函数和函数指针么? 并非你说的C用法 C++用法
而且代码是编译通过的么?
#inclde<iostream> 还掉了个U
如果 typedef int (_stdcall *pMsgBox)(HWND,LPCTSTR,LPCTSTR,UINT); pMsgBox pf 中PF 我在VC6下有类型转换问题
能力值:
( LV2,RANK:10 )
16 楼
确实少了个u,已改正,呵呵。
汗。。。类型转换有问题是因为没加强制类型转换,我漏打了……已改正。
看来以后帖代码要直接copy/paste了。