C语言第6课——函数指针

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_35682844/article/details/84444995

定义

函数指针,其本质是一个指针变量,该指针指向这个函数。总结来说,函数指针就是指向函数的指针。 

声明格式:类型说明符 (*函数名) (参数) 

int (*fun)(int x,int y);

函数指针是需要把一个函数的地址赋值给它,有两种写法:

fun = &Function;
fun = Function;

取地址运算符&不是必需的,因为一个函数标识符就表示了它的地址,如果是函数调用,还必须包含一个圆括号括起来的参数表。

调用函数指针的方式也有两种:

x = (*fun)();
x = fun();

两种方式均可,其中第二种看上去和普通的函数调用没啥区别,如果可以的话,建议使用第一种,因为可以清楚的指明这是通过指针的方式来调用函数。

实例

以下实例声明了函数指针变量 p,两个int类型参数,无返回值,指向Add、Decr、Multi、Div:

#include <stdio.h>
#define _CRT_SECURE_NO_DEPRECATE
#pragma warning(disable:4996)
void(*p)(int x, int y);
void Add(int a, int b);
void Decr(int a, int b);
void Multi(int a, int b);
void Div(int a, int b);

int main()
{
	int a, b;
	char ch;
	printf("请输入两个整数:\n");            
	scanf_s("%d%d", &a, &b);                 
	ch = '+';      //改变运算符,会调用不同的程序
	switch (ch)
	{
	case '+':
		p = Add;
		(*p)(a, b);
		break;
	case '-':
		p = Decr;
		(*p)(a, b);
		break;
	case '*':
		p = Multi;
		(*p)(a, b);
		break;
	case '/':
		p = Div;
		(*p)(a, b);
		break;
	default:
		break;
	}
	return 0;
}

void Add(int a, int b)
{
	printf("%d+%d=%d", a, b, a + b);
}

void Decr(int a, int b)
{
	printf("%d-%d=%d", a, b, a - b);
}

void Multi(int a, int b)
{
	printf("%d*%d=%d", a, b, a * b);
}

void Div(int a, int b)
{
	printf("%d/%d=%d", a, b, a / b);
}

回调函数(函数指针作为某个函数的参数)

函数指针变量可以作为某个函数的参数来使用的,回调函数就是一个通过函数指针调用的函数。

简单讲:回调函数是由别人的函数执行时调用你实现的函数。

实例

showInfo(int a,int b,int (*p)(a,b))就是一个回调函数。第三个参数为函数指针。

#include <stdio.h>
void showInfo(int a, int b, int(*p)(a, b));
int Add(int a, int b);
int Decr(int a, int b);
int Multi(int a, int b);
int Div(int a, int b);

int main()
{
	showInfo(5, 2,Add);
	return 0;
}

void showInfo(int a, int b, int(*p)(a, b))
{
	printf("%d", (*p)(a, b));
}

int Add(int a, int b)
{
	return a + b;
}

int Decr(int a, int b)
{
	return a - b;
}

int Multi(int a, int b)
{
	return a * b;
}

int Div(int a, int b)
{
	return a / b;
}

猜你喜欢

转载自blog.csdn.net/qq_35682844/article/details/84444995