C语言函数型指针与指针型函数辨析

指针型函数

指针型函数指的是函数的返回值是指针类型。
例如

int* miltd(int* a,int b){
    *a=(*a)*b;
    //返回的是int型指针
    return a; 
}

函数型指针

函数型指针是一个指向函数入口地址的指针。
函数型指针可以作为参数传递,在C语言排序函数qsort和C++STL的sort函数,优先队列priority_queu都有使用,所以很有必要学习,具体应用参见后面的文章。
定义

函数返回值 (*函数型指针名称)(函数形式参数)= 函数入口地址;

调用

函数型指针名称(函数实际参数);

注意
函数名字在作为右值时会发生隐式类型转换,相当于函数的入口地址。
所以fun在作为右值时和&fun完全等同。(类似的隐式类型转换也发生在数组名上,数组名作为右值相当于数组的入口地址。)
所以下面的写法完全等同

函数型指针第一种写法(常用写法)

#include <stdio.h>
void fun(int a){
	printf("Value of a is %d\n", a);
}
int main(){
	// fun_ptr是一个指针,指向函数的入口地址 
	//定义函数型指针 
	void (*fun_ptr)(int) = fun;
	//使用
	fun_ptr(10);
	return 0;
}

函数型指针的第二种写法

int main(){
	void (*fun_ptr)(int) = &fun;
	//解引用不是必须的
	(*fun_ptr)(10);
	return 0;
}

甚至可以这样写

运行结果也是一样的

int main(){
	void (*fun_ptr)(int) = &fun;
	//可以不解引用
	fun_ptr(10);
	return 0;
}

应用:指针型函数作为参数传递

#include <stdio.h>
//两个函数
void fun1() { printf("Fun1\n"); }
void fun2() { printf("Fun2\n"); }
//wrapper函数以函数指针作为参数
void wrapper(void (*fun)()){
	fun();
}
int main(){
    //传入不同的函数名字
	wrapper(fun1);
	wrapper(fun2);
	return 0;
}
posted @ 2026-01-23 13:26  sunrise0307  阅读(3)  评论(0)    收藏  举报