函数指针三种定义与使用方式
Posted 流楚丶格念
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了函数指针三种定义与使用方式相关的知识,希望对你有一定的参考价值。
函数类型
通过什么来区分两个不同的函数?
一个函数在编译时被分配一个入口地址,这个地址就称为函数的指针,函数名代表函数的入口地址。
函数三要素: 名称、参数、返回值。(C 语言中的函数有自己特定的类型)
c 语言中通过 typedef 为函数类型重命名:
// f 为函数类型
typedef int f(int, int);
// p 为函数类型
typedef void p(int);
这一点和数组一样,因此我们可以用一个指针变量来存放这个入口地址,然后通过该指针变量调用函数。
注意:通过函数类型定义的变量是不能够直接执行,因为没有函数体。只能
通过类型定义一个函数指针指向某一个具体函数,才能调用。
typedef void(p)(int, int);
void my_func(int a, int b)
{
printf("%d %d\\n", a, b);
}
void test()
{
p p1;
//p1(10,20); //错误,不能直接调用,只描述了函数类型,但是并没有定义函数体,没有函数体无法调用
p* p2 = my_func;
p2(10, 20); //正确,指向有函数体的函数入口地址
}
函数指针(指向函数的指针)
- 函数指针定义方式(先定义函数类型,根据类型定义指针变量);
- 先定义函数指针类型,根据类型定义指针变量;
- 直接定义函数指针变量;
例如下面my_func函数
int my_func(int a, int b) {
printf("ret:%d\\n", a + b);
return 0;
}
函数指针的定义与调用
//1. 先定义函数类型,通过类型定义指针
void test01() {
typedef int(FUNC_TYPE)(int, int);
FUNC_TYPE* f = my_func;
//如何调用?
(*f)(10, 20);
f(10, 20);
}
//2. 定义函数指针类型
void test02() {
typedef int(*FUNC_POINTER)(int, int);
FUNC_POINTER f = my_func;
//如何调用?
(*f)(10, 20);
f(10, 20);
}
//3. 直接定义函数指针变量
void test03() {
int(*f)(int, int) = my_func;
//如何调用?
(*f)(10, 20);
f(10, 20);
}
函数指针和指针函数的区别:
-
函数指针是指向函数的指针;
-
指针函数是返回类型为指针的函数;
案例
C语言提高:函数指针做函数参数:
https://yangyongli.blog.csdn.net/article/details/118710963
以上是关于函数指针三种定义与使用方式的主要内容,如果未能解决你的问题,请参考以下文章