我们都知道C语言中有一类指针叫做函数指针,但是它的用法和指针不大一样,甚至说它是一个异类指针。
下面看一段代码
#include <stdio.h>
int add(int a, int b)
{
return a + b;
}
int main()
{
int(*pfunc)(int, int) = add;
printf("%d\n", (*************pfunc)(2, 3));
printf("%d\n", (********pfunc)(2, 3));
printf("%d\n", (*pfunc)(2, 3));
printf("%d\n", (pfunc)(2, 3));
system("pause");
return 0;
}
那么代码输出什么呢??
为什么说函数指针和普通的指针不一样?这就是原因。
所有的解引用碰到函数指针的时候 = 不存在;不存在形式上的指针,一般也不会做这样的时,没有意义。函数在被调用的的时候才有空间,所以add此时没有空间,也就没有地址,那么add赋值过去了什么?函数指针只是样子上的指针,其实在函数上设置了虚地址,假地址,也就是add有一个假的地址假设为0x01,不是真正有空间的,赋值过去的是假地址,通过这个假地址去找,并不是不是真正的指针。
add此时没有空间,就没有了地址,函数指针不可能接收到一个真正的指针,所以说函数指针只是一个形式上的指针,不要和真正的指针混杂到一起。所以不是指针的用法
&add的
&add 也是一样的 不会受影响