目录
何为函数指针
打印 函数名的地址 及 &函数名的地址
函数指针的代码(如何正确存储函数地址)
函数指针的使用
何为函数指针
类比:
整型指针 - 指向整型数据的指针,整型指针存放的是整型数据的地址
字符指针 - 指向字符数据的指针,字符指针存放的是字符数据的地址
由此可得:
函数指针 - 指向函数的指针,函数指针存放的是函数的地址
打印 函数名的地址 及 &函数名的地址
回顾上次:C语言 ——— 数组指针的定义 & 数组指针的使用-CSDN博客
数组名的地址 和 &数组名 的地址是相同的,那么 函数的地址 和 &函数的地址 是否相同?
创建一个整型变量相加的Add函数:
int Add(int x, int y)
{
return x + y;
}
打印Add函数的地址 以及 &Add函数的地址:
由此可见,函数名的地址 和 &函数名的地址 是相同的
那么 函数地址 如何存储在 函数指针 中?
函数指针的代码(如何正确存储函数地址)
int (*pAdd)(int, int) = &Add;
解析代码:
Add函数的返回值和参数:int Add(int x, int y)
解析:int (*pAdd)(int, int) = &Add;
解析(*pAdd):表明 pAdd是指针,由于 括号 的 优先级高于 *号,所以要将 *pAdd 括起来
去掉(*pAdd),剩下的就是指针的类型
解析int (int, int):Add函数 的 返回值是int,参数是(int, int),表示 (*pAdd) 的类型是函数
小结:
函数指针的创建方式 类似于 数组指针
函数指针的使用
通过 函数指针 存放 函数的地址后,又如何通过 函数指针来使用函数 呢
代码演示:
#include<stdio.h>
int Add(int x, int y)
{
return x + y;
}
int main()
{
int (*pAdd)(int, int) = &Add;
// 通过函数名使用函数
int r = Add(3, 5);
printf("3 + 5 = %d\n", r);
// 通过函数指针使用函数
int s = (*pAdd)(5, 10);
printf("5 + 10 = %d\n", s);
return 0;
}
代码解析:
解析:int s = (*pAdd)(5, 10);
pAdd 为 Add函数 的地址,通过 *号解引用 找到 Add函数,再(5,10)传参就能完成函数的使用了
代码验证: