【C语言】函数指针---异类指针

我们都知道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 也是一样的 不会受影响

发布了55 篇原创文章 · 获赞 12 · 访问量 5271

猜你喜欢

转载自blog.csdn.net/weixin_43939593/article/details/103209530