💘作者:你我皆为凡人
💘博客主页:你我皆为凡人的博客
💘名言警句:时间不会为任何人停留,而事物与人,无时不刻也在变化着。每一个人,也都在不停向前!
💘觉得博主文章写的不错的话,希望大家三连(✌关注,✌点赞,✌评论),多多支持一下!!
💘系列作品:
💘
文章目录
目录
🙈 前言
本篇既上篇后续又讲解了新的知识,关于函数指针,函数指针数组,指向函数指针数组的指针与回调函数这些一看就比较令人头疼的知识点,一些比较高的知识点,希望大家可以理解并且学会
提示:以下是本篇文章正文内容,下面案例可供参考
💫函数指针
之前的数组指针是指向数组的指针就是数组指针
函数指针就是指向函数的指针就是函数指针
那么我们知道 数组指针是取数组的地址,那么函数莫非就是取出函数的地址?
那么下面我们来探索函数指针:
#include<stdio.h>
int add(int x, int y)
{
return x + y;
}
int main()
{
int arr[5] = { 0 };
//&数组名--取出的数组的地址
int(*p)[5] = &arr; //数组指针
//&函数名-取出的就是函数的地址嘛?
printf("%p\n", &add);
//函数名,是函数的首元素地址嘛,函数怎么有首元素呢?
printf("%p\n", add);
//对于函数来说,&函数名和函数名都是函数的地址
//如果要取出函数的地址,该如何存放呢?
int (*pf)(int, int) = &add;
return 0;
}
首先要注意,函数指针其实和数组指针大同小异,&函数名和函数名都是函数的地址,如果要取出函数的地址,首先要说明是个指针 (*pf)函数内参数类型是(int,int)返回值是int,这就构成了函数指针,指向的是一个函数
我们使用指针是为了有朝一日可以用到它,那么函数指针是如何使用的呢?
int (*pf)(int, int) = &add;
int ret = (*pf)(2, 3);
printf("%d", ret);
return 0;
其实(*pf)里面的*在这里没有意义,大家想一想,既然add可以是地址,&add也是地址,那么把add直接赋值给pf也可以,我们平常调用函数是 add(2,3),那么直接pf(2,3)也是相同的道理
那么函数指针如何使用呢?
int add(int x, int y)
{
return x + y;
}
void calc(int(*pf)(int, int))
{
int a = 3;
int b = 5;
int ret = pf(a, b);
printf("%d\n", ret);
}
int main()
{
calc(add);
return 0;
}
这样看起来好像麻烦了