C 函数指针语法总结

C 函数指针语法总结

函数指针

定义

每个函数都占用一段内存单元,它们有一个起始地址,指向函数入口地址的指针称为函数指针ios

注意:函数指针的本质是一个指针变量,且指针指向的函数的入口地址函数

语法

返回类型 (*函数名) (参数表);spa

例:指针

#include <iostream>
 
using namespace std;
//定义一个函数指针pFUN,它指向一个返回类型为char,有一个整型的参数的函数
char (*pFun)(int);
//定义一个返回类型为char,参数为int的函数
//从指针层面上理解该函数,即函数的函数名其实是一个指针,
//该指针指向函数在内存中的首地址
char glFun(int a)
{
    cout << a;
    //return a;
}
 
int main()
{
//将函数glFun的地址赋值给变量pFun
    pFun = glFun;
//*pFun”显然是取pFun所指向地址的内容,
固然也就是取出了函数glFun()的内容,而后给定参数为2。
    (*pFun)(2);
    //pfun(2);  也是对的
    return 0;
}

函数指针类型

语法

typedef 返回类型 (*函数名) (参数表);code

例:内存

#include <iostream>
 
using namespace std;
//定义一个函数指针类型
typedef char (*mypFun)(int);
//定义一个返回类型为char,参数为int的函数
//从指针层面上理解该函数,即函数的函数名其实是一个指针,
//该指针指向函数在内存中的首地址
char glFun(int a)
{
    cout << a;
    //return a;
}
 
int main()
{
//定义一个函数指针变量,将函数glFun的地址赋值给变量myp
    mypFun myp = glFun;
//*pFun”显然是取pFun所指向地址的内容,
//固然也就是取出了函数glFun()的内容,而后给定参数为2。
    (*myp)(2);
    //myp(2);  也是对的
    return 0;
}

历史与逻辑

(*myp)(2);	//下文用 星myp表示
myp(2);  
//两种写法都是对的

真是很是棒的语法! 为什么 myp 和 ( 星 myp)等价呢?一种学派认为,因为 myp 是函数指针,而 ( 星 myp)是函数,所以应将 ( 星 myp)() 用做函数调用。另外一种学派认为,因为函数名是指向该函数的指针,指向函数的指针的行为应与函数名类似,所以应将 myp() 用做函数调用使用。C++ 进行了折衷——这 2种方式都是正确的,或者至少是容许的,虽然它们在逻辑上是互相冲突的。在认为这种折衷粗糙以前,应该想到,容忍逻辑上没法自圆其说的观点正是人类思惟活动的特色。io

相关文章
相关标签/搜索