关于函数指针的比较

Posted kuikuitage

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于函数指针的比较相关的知识,希望对你有一定的参考价值。

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字节),/*pfunc1的值实际为内存中pfunc1本身的地址,而非f1中存的值(f1的地址)*/。(有问题)

正确的比较方法为 0 == memcmp(pfunc1, pfunc3) ?

 

实际上:

pfunc1 = f1;//等价于
pfunc1 = &f1;




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

  int a = 0; 

  int b = 1;

  int* p1 = &a;

  int*p2 = &b;

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

 






以上是关于关于函数指针的比较的主要内容,如果未能解决你的问题,请参考以下文章

关于传递指针给函数的未解疑问

更新:C++ 指针片段

关于指针数组字符串的恩怨,这里有你想知道的一切

关于代码片段的时间复杂度

几个关于js数组方法reduce的经典片段

C语言指针学习总结