【C++】函数指针 ③ ( 函数指针语法 | 函数名直接调用函数 | 定义函数指针变量 | 使用 typedef 定义函数类型 | 使用 typedef 定义函数指针类型 )

蔚落 2024-02-18 09:29 186阅读 0赞

文章目录

  • 一、函数指针语法
    • 1、函数名直接调用函数
    • 2、定义函数指针变量
    • 3、使用 typedef 定义函数类型
    • 4、使用 typedef 定义函数指针类型
  • 二、完整代码示例

一、函数指针语法


1、函数名直接调用函数

定义一个函数 , 如下 函数的类型是 int(int, int) ;

  1. int add(int x, int y) {
  2. printf("x + y = %d\n", x + y);
  3. return x + y;
  4. }

直接调用函数 : 该函数的 函数名 add 就是 函数地址 , 直接调用 add 函数 , 运行该函数 ;

  1. // 1. 直接调用
  2. // 直接调用 add 函数 , 运行该函数
  3. // 函数名 add 就是函数地址
  4. add(1, 2);

2、定义函数指针变量

如果不使用 add 函数名 调用函数 , 使用 函数类型的指针 也可以 调用函数 ;

函数 int add(int x, int y) 的 类型是 int(int, int) , 函数类型只需要注明函数的 返回值 和 参数列表 类型即可 ;

直接定义 int(int, int) 函数类型 的指针 , 将 add 函数名 ( 函数地址 ) 直接 赋值给 函数指针 , 可以直接通过函数指针调用函数 ;

下面的代码中 , 定义了函数指针 p , 指向 int(int, int) 类型的函数 , 将 add 函数地址 赋值给 函数指针 p , 之后通过 函数指针 p 调用 add 函数 ;

代码如下 :

  1. // 声明一个 int(int, int) 类型的指针变量
  2. // int(int, int) 类型 是 函数类型
  3. // 该指针 指向 函数地址
  4. int(*p)(int, int) = add;
  5. // 通过函数指针调用 函数
  6. p(3, 4);

3、使用 typedef 定义函数类型

定义函数类型 语法格式如下 :

  1. typedef returntype newfunname(parameterlist)
  • typedef 是 类型重命名 关键字 ;
  • returntype 是 函数返回值类型 ;
  • newfunname 是 定义的函数类型名称 ;
  • parameterlist 是 函数的参数列表 ;

定义函数类型示例 :int add(int x, int y) 函数的 函数类型 int (int, int) , 定义为 func_add 名称 , 使用时需要使用该类型的指针调用函数 , 也就是 func_add* 类型 ;

  1. // int (int, int) 函数类型重命名为 func_add
  2. // 使用时需要使用该类型的指针调用函数
  3. typedef int fun_add(int, int);

使用定义的 函数类型 调用函数 : 定义函数类型 的 指针类型 func_add* 变量 , 然后 将 add 函数地址 赋值给 该指针变量 , 然后 通过 函数指针变量 调用该函数 ;

  1. // 定义函数指针类型变量
  2. fun_add* fun = add;
  3. fun(5, 6);

4、使用 typedef 定义函数指针类型

定义函数指针类型 语法格式如下 :

  1. typedef returntype (*newfunname)(parameterlist)
  • typedef 是 类型重命名 关键字 ;
  • returntype 是 函数返回值类型 ;
  • * 表示 定义的是 指针类型 , 指向函数地址 ;
  • newfunname 是 定义的函数类型名称 ;
  • parameterlist 是 函数的参数列表 ;

定义函数类型示例 : 将指向 int add(int x, int y) 函数的 函数指针类型 int (*)(int, int) , 定义为 pFun_add名称 , 使用时需要使用该类型变量调用函数 , 也就是 pFun_add 类型 ;

  1. // int (int, int) 函数指针类型重命名为 pFun_add
  2. // 该类型变量可以直接接收 函数名 ( 函数地址 )
  3. typedef int (*pFun_add)(int, int);

使用定义的 函数指针类型 调用函数 : 定义函数指针类型 pFun_add 的 变量 , 然后 将 add 函数地址 赋值给 该变量 , 然后 通过 函数指针变量 调用该函数 ;

  1. // 定义函数指针类型变量
  2. pFun_add pFun = add;
  3. fun(7, 8);

二、完整代码示例


代码示例 :

  1. #include "iostream"
  2. using namespace std;
  3. // int (int, int) 函数类型重命名为 func_add
  4. // 使用时需要使用该类型的指针调用函数
  5. typedef int fun_add(int, int);
  6. // int (int, int) 函数指针类型重命名为 pFun_add
  7. // 该类型变量可以直接接收 函数名 ( 函数地址 )
  8. typedef int (*pFun_add)(int, int);
  9. int add(int x, int y) {
  10. printf("x + y = %d\n", x + y);
  11. return x + y;
  12. }
  13. int main() {
  14. // 1. 直接调用
  15. // 直接调用 add 函数 , 运行该函数
  16. // 函数名 add 就是函数地址
  17. add(1, 2);
  18. // 声明一个 int(int, int) 类型的指针变量
  19. // int(int, int) 类型 是 函数类型
  20. // 该指针 指向 函数地址
  21. int(*p)(int, int) = add;
  22. // 通过函数指针调用 函数
  23. p(3, 4);
  24. // 定义函数指针类型变量
  25. fun_add* fun = add;
  26. fun(5, 6);
  27. // 定义函数指针类型变量
  28. pFun_add pFun = add;
  29. fun(7, 8);
  30. // 控制台暂停 , 按任意键继续向后执行
  31. system("pause");
  32. return 0;
  33. }

执行结果 :

  1. x + y = 3
  2. x + y = 7
  3. x + y = 11
  4. x + y = 15
  5. Press any key to continue . . .

在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,186人围观)

还没有评论,来说两句吧...

相关阅读