指向函数的指针变量
程序员文章站
2024-02-29 17:22:46
...
1. 说明:
函数在编译时会被分配给一个入口地址, 而指针变量用于存放地址(指针), 所以可以使用指针来指向函数并调用该函数, 这个指针就是函数指针 .
2. 定义 :
类型名 (*指针变量名) (函数参数列表)
3. 注意 :
1) 定义指向函数的指向变量, 并不意味其能指向任何函数, 而是只能指向定义时指向的类型函数 .
2) 若需要用指针调用函数, 必须先使用指针变量指向该函数 .
3) 给函数指针变量赋值时, 只需给出函数名而不用给参数 (eg: Funptr &sum) .
4) 若 ptr 指针指向某个函数, 则除了使用函数名调用函数外, 还可使用 (*ptr) 代替函数名, 后面和使用函数名调用函数一样的, 需要给出调用的参数, 若有返回值同样和调用函数一样接收返回值即可 .
5) 一般的指针是可以进行相关算数运算的(eg: "ptr++"), 但函数指针是不可以进行任何算数运算的 .
4. 优点 :
使用函数名调用函数, 只能调用所指向的一个函数, 而通过指针变量调用函数比较灵活, 其可根据不同情况先后调用不用函数 .
5. 案例及详细分析 :
#include <stdio.h>
// 声明 sum 函数 (也叫函数签名)
int sum(int,int);
int main (void)
{
int a, b;
/*类似 main 函数上的 sum 函数的声明一样, 声明 FunPtr函数指针变量
(也可以理解为FunPtr的函数签名,其指向的函数具有两个整数输入和一个整数输出)*/
int (* FunPtr) (int, int);
/*类似 main 函数下的 sum 函数的正式定义一样, 正式定义 FunPtr 函数
指针指向的地址为函数 sum 的入口地址 . */
FunPtr = & sum;
// 用于对比的测试数据 a
a = sum(3,7);
// 调用函数指针 FunPtr (引用指针函数和引用指针变量都是一样的, 必须使用: "*")
b = (* FunPtr) (3, 7);
printf("sum(3,7) = %d.\n(*FunPtr)(3,7) = %d\n", a, b);
return 0;
}
// 正式定义 sum 函数 :
int sum(int x, int y)
{
return (x+y);
}
上一篇: Ubuntu 16.04下CLIon使用Makefile单步调试
下一篇: NOTES - Array of Pointers to Strings / 指向str array的多级指针数组
推荐阅读
-
指向函数的指针变量
-
NOTES - Array of Pointers to Strings / 指向str array的多级指针数组
-
python中将函数赋值给变量时需要注意的一些问题
-
再也不用担心算错啦~看看我们实现的计算器吧~(函数指针数组)
-
c语言clock()计时操作(包含函数指针的应用)
-
【转】Shell中脚本变量和函数变量的作用域 博客分类: linux命令unix shell作用域shelllocal函数变量
-
【转】Shell中脚本变量和函数变量的作用域 博客分类: linux命令unix shell作用域shelllocal函数变量
-
函数指针的用法。
-
C ++ 函数中的静态变量
-
php中在变量和函数前加static关键字之后的区别