函数名与函数指针

  先来看一个程序:

/*************************************************************

    函数指针与函数名

**************************************************************/

#include <iostream>
using namespace std;

int max(int, int);

int main()
{
    cout<<max(1, 2)<<endl;
    cout<<(*max)(1, 2)<<endl;

    cout<<max<<endl;
    cout<<(*max)<<endl;
    cout<<&max<<endl;

    int (*p)(int, int);
    p = max;

    cout<<p(1, 2)<<endl;
    cout<<(*p)(1, 2)<<endl;

    cout<<p<<endl;
    cout<<(*p)<<endl;
    cout<<&p<<endl;

    int (*q)(int, int);
    q = &max;

    cout<<q(1, 2)<<endl;
    cout<<(*q)(1, 2)<<endl;

    cout<<q<<endl;
    cout<<(*q)<<endl;
    cout<<&q<<endl;

    return 0;
}

int max(int a, int b)
{
    return a > b? a : b;
}

  运行结果:

2
2
0040120D
0040120D
0040120D
2
2
0040120D
0040120D
0012FF7C
2
2
0040120D
0040120D
0012FF78

 引用文章《彻底搞定C指针-函数名不得已函数指针》的结论语: 

  1. 其实,max的函数名与函数指针p, q都是一样的,即都是函数指针。max函数名是一个函数指针常量,而p, q是一个函数数指针变量,这是它们的关系。
  2. 但函数名调用如果都得如(*max)(1, 2);这样,那书写与读起来都是不方便和不习惯的。所以C语言的设计者们才会设计成又可允许max(1, 2);这种形式地调用(这样方便多了并与数学中的函数形式一样)。
  3. 为统一起见,P, q函数指针变量也可以p(1, 2), q(1, 2)的形式来调用。
  4. 赋值时,即可P = max形式,也可q = &max。
原文地址:https://www.cnblogs.com/danshui/p/2745424.html