kuikuitage

  博客园  ::  :: 新随笔  :: 联系 ::  :: 管理
typedef void (*pFunc)(void);



void f1(void);

void f2(void);



pFunc pfunc1 = f1;

pFunc pfunc2 = f2;

pFunc pfunc3 = f2;

 

比较pfunc1,pfunc2,pfunc3是否指向同一个函数?

pfunc1 == pfunc3 ? 

 

pFunc作为函数指针类型,其本身是一个指针,在内存中实际占有空间(一般32位系统指针4字节)

另一种比较方法为 0 == memcmp(pfunc1, pfunc3) 


或者拿整数来说明:
好比:

  int a = 0; 

  int b = 1;

  int* p1 = &a;

  int*p2 = &b;

  是比较p1 == p2还是 *p1 = *p2?

 

 

通常会使用 == ,但这种方式只是比较地址是否一致,至于地址的内容不管。

实际上当涉及到dll时,一个库被FreeLibrary后,其原先指向库中的函数指针地址已经无效。此时如果出现上述函数指针比较,即使地址相同,实际该地址函数实体可能已经无效,此时使用memcmp应该更安全。

posted on 2018-06-21 15:25  kuikuitage  阅读(203)  评论(0)    收藏  举报