返回函数指针: int(*)(int, int)与int *(int, int)的区别

   int(*)(int, int)类型实际上是一个函数指针(指向的函数返回int),而int *(int, int)的类型实际上是一个函数类型(该函数返回int *).同理,int (*)[10]与int *[10]的区别也与之类似(前者为数组指针,后者为存放int指针的数组).

   int(*)(int, int)与int *(int, int)这二者在作为函数的返回类型时,区别明显.请看代码.

 1 #include <iostream>
 2 #include <typeinfo>
 3 using namespace std;
 4 
 5 using PF = int(*)(int, int);//函数指针类型
 6 using PE = int *(int, int);//函数类型;PE *才是函数指针类型, PE * p 等价于int *(*p)(int, int).
 7 
 8 int ff1(int a, int b)
 9 {
10     return 1;
11 }
12 
13 int i = 1;
14 int *p = &i;
15 int  *ff2(int a, int b)
16 {
17     return p;
18 }
19 
20 PF f1()
21 {
22     cout << "f1" << endl;
23     return ff1;
24 }
25 
26 PE *f2()
27 {
28     cout << "f2" << endl;
29     return ff2;
30 }
31 
32 int main()
33 {
34     cout << "PF = " << typeid(PF).name() << endl;
35     cout << "PE = " << typeid(PE).name() << endl;
36     f1();
37     f2();
38     return 0;
39 }

 

  注意上述PE *的类型.打印结果如下:

 

posted @ 2017-05-01 22:09  SuperYang  阅读(1922)  评论(0编辑  收藏  举报