C语言_函数指针

1、函数指针是什么?

函数指针是指向函数的指针变量。在C语言中,函数名代表函数的入口地址,因此可以将函数名赋值给函数指针变量,从而使得函数指针变量指向该函数。

2、函数指针能做什么?

通过函数指针,可以动态地调用不同的函数,实现函数的灵活调用和运行时的动态绑定。函数指针的类型由其所指向的函数的返回类型和参数类型决定,因此在声明函数指针变量时,需要指定函数指针变量所指向的函数的返回类型和参数类型。

函数指针常用于实现回调函数、动态调用函数和实现函数指针数组等功能,是C语言中非常重要和灵活的特性之一。

3、具体使用

函数指针的类型:
形式一:返回类型(*函数名)(参数表)

#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);
    return 0;
}

通过typedef可以让函数指针的使用更见方便直观。
形式二:typedef 返回类型(*新类型)(参数表)

typedef char (*PTRFUN)(int); 
PTRFUN pFun; 
char glFun(int a){ return;} 
void main() 
{ 
    pFun = glFun; 
    (*pFun)(2); 
} </span>

typedef的功能是定义新的类型。第一句就是定义了一种PTRFUN的类型,并定义这种类型为指向某种函数的指针,这种函数以一个int为参数并返回char类型。后面就可以像使用int,char一样使用PTRFUN了。
第二行的代码便使用这个新类型定义了变量pFun,此时就可以像使用形式1一样使用这个变量了。

举例:
当我们想要动态地调用不同的函数时,我们可以使用函数指针。下面是一个简单的例子来说明如何声明、赋值和调用函数指针:

#include <stdio.h>

// 声明一个函数类型为 void (*)(int)
typedef void (*PrintFunc)(int);

// 定义两个函数,用于打印数字
void printNumber(int num) {
    printf("Number: %d\n", num);
}

void printSquare(int num) {
    int square = num * num;
    printf("Square: %d\n", square);
}

int main() {
    // 声明一个函数指针变量
    PrintFunc printFunc;

    // 赋值给函数指针变量
    printFunc = printNumber;
    printFunc(5); // 调用函数指针,输出 Number: 5

    printFunc = printSquare;
    printFunc(5); // 调用函数指针,输出 Square: 25

    return 0;
}

在上面的例子中,我们首先使用 typedef 声明了一个函数类型 PrintFunc,它是一个指向函数的指针,接受一个 int 类型的参数并返回 void。接下来,我们定义了两个函数 printNumber 和 printSquare,分别用于打印数字和打印数字的平方。

在 main 函数中,我们声明了一个函数指针变量 printFunc。然后,我们将 printFunc 分别赋值为 printNumber 和 printSquare,可以根据需要动态选择调用哪一个函数。最后,通过调用函数指针变量 printFunc,我们可以动态调用不同的函数,并输出相应的结果。

这个简单的示例展示了函数指针的基本用法,用于动态选择和调用不同的函数。在实际应用中,函数指针经常用于回调函数、动态加载函数以及实现函数指针数组等场景。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值