1楼感觉对函数指针不是很了解,就不评论了. 2楼的基本还可以,但是int (*p)(),然后让它指向max函数,一个包含两个未知量的函数,这在后来的标准c里面是不支持的好像. 3楼吧,那么多*,感觉有点不大对. *是取内容,连着那么* ,我没试过,没有多少意义至少.他11级了,应该也不会怎么有错,你可以试试(我不打算加那么多*, 就不调试了).
程序里面对函数的调用,就是通过函数的入口地址,然转入函数. 这样的话,函数指针的意义就明显了.函数指针指向了函数的入口,即函数指针里是函数的入口地址. 指针不能指向函数这种说法肯定是不对的.话说回来,1楼的老兄可能看错书了,或者记错了.
类型匹配很重要,二楼的声明和使用不一致,这在老版的编译器里也是支持的.那时候ANSI标准还没有制定出来.现在而言,这种定义应该不被支持了才是.
那个声明应该如下:
int (*p)(int , int);
这样才能指向
int name(int,int)型的函数.么有实验过,但按这种写法是不错的肯定.
三楼那个********p,怎么都觉得不对.
如果存在函数指针p,以*p取函数指针的值,然后加上参数列表调用即可。
即
ret = (*p)(arg_list);
如,p为int (*)(int)类型的函数指针,那么
int a = (*p)(10);
这样就是一次典型的函数指针调用。
指向函数的指针的说话本身有问题的,你说的是函数指针吧,如
int *fun(int*a);
这个函数接收一个指针,并返回一个指针,指针不能指向函数,只能指向函数的返回值,函数在内存中是存放在程序代码区的,而指针是用来访问堆中空间的
其实,函数指针确实不是“指向函数的指针”
函数指针,就是函数指针,加不加*没有实际意义。
二楼的那个:
c=(*p)(a,b);
也可以写成
c=(****************************************************p)(a,b);
或者
c=p(a,b);
你说它指向什么?
PS,加*有特殊的用途,初学者就算了
int max(int x,int y){...}
main()
{ int (*p)(); //指向函数的指针
int a=10,b=20,c;
p=max; //指向max函数
c=(*p)(a,b); //与c=max(a,b);等价
...
}