C语言函数指针和指针函数的定义和调用

函数指针和指针函数的定义和调用

确实第一次听到函数指针和指针函数的时候感觉特别的绕。而且昨天要写函数指针的时候一下子想不起来,自己写篇文章和大家分享一下也让我增加印象。

指针函数

指针是函数的返回类型
int*  Fun(void);
int*是一个int类型的指针,作为函数的返回值
声明格式:类型说明符* 函数名(参数)
int* Fun1(int data1);
返回值类型一定要是个指针

函数指针

是代表函数入口地址的变量
函数本体: int Fun(int);
函数指针  in (*p)(int) = Fun;
声明格式:类型说明符 (*函数名) (参数)
int (*Fun1)(int);

注意:类型说明符和参数的类型数量是根据你要保存的函数的格式一样的

p保存了Fun函数的入口地址
函数调用上
int a = 5;
p(5)等价于Fun(5)

我先将函数Fun1的地址存入函数指针p中
然后分别调用Fun和p进行输出,结果下图这样。
大家可以去试试。代码我贴在下面
函数指针的调用

#include <iostream>
#include <Windows.h>

int Fun1(int data1) {
    
    
	static int i;
	i++;
	printf("第%d次:data1 = %d\n", i,data1);
	return data1;
}

void Fun_ALL(int (*p)(int), int a) {
    
    
	p(a);
}

int main() {
    
    
	int(*p)(int) = Fun1;
	Fun_ALL(Fun1, 3);
	Fun_ALL(p, 5);
	system("pause");
	return 0;
}

用途:
有人会问函数指针还要多开一个变量,还要去保存,写成这样干啥哦,浪费空间和时间,其实不然,函数指针在某一个函数中需要调用同类型的函数时很有用的,你只需要把你自己的函数名称传入即可,不然的话就是要做标志位参数去判断了,这样不仅更浪费空间而且代码会变得很冗余的。
抛砖引玉一下:
先上运行结果在这里插入图片描述

基础运算代码(就是简单的加减乘除)

//加法
int sum(int data1, int data2) {
    
    
	printf("sum: %d + %d = %d\n", data1, data2, data1 + data2);
	return data1 + data2;
}
//减法
int sub(int data1, int data2) {
    
    
	printf("sub: %d - %d = %d\n", data1, data2, data1 - data2);
	return data1 - data2;
}
//乘法
int mul(int data1, int data2) {
    
    
	printf("mul: %d * %d = %d\n", data1, data2, data1 * data2);
	return data1 * data2;
}
//除法
int division(int data1, int data2) {
    
    
	printf("div: %d / %d = %d\n", data1, data2, data1 / data2);
	return data1 / data2;
}

运算整合代码

int Fun(	
	int (*p1)(int, int),		//第一个运算
	int (*p2)(int, int),		//第二个运算
	int (*p3)(int, int),		//第三个运算
	int data1, int data2) {
    
    
	int res = 0;
	res = p3( p2( p1(data1, data2), data1), data1);
	printf("Res:%d\n", res);
	return res;
}

main函数

int main() {
    
    
	Fun(division, sum, mul, 20, 4);
	system("pause");
	return 0;
}

运行结果:
在这里插入图片描述
函数指针还有很多的用途啦,指针用的话,大神跑不了,哈哈哈哈哈。

猜你喜欢

转载自blog.csdn.net/qq_45488746/article/details/119212203