程序:求10个数的最大数
1、定义指向函数的指针变量调用函数的方法
一般定义形式为:类型名 (*指针变量名)();
#include<stdio.h>
int main()
{
	int i, m, a[10], max(int* p);
	int (*f)();
	for (i = 0; i < 10; i++)
		scanf_s("%d", &a[i]);
	f = max;//max就是函数的地址,f也是地址
	m = (*f)(a);//a是实参
	printf("max=%d\n", m);
	return 0;
}
max(int* p)
{
	int i, t = *p;
	for (i = 1; i < 10; i++)
		if (*(p + i) > t)
			t = *(p + i);
	return t;
}
 
注意,指针变量的数据类型必须与被指向的函数类型一致
2、用指向函数的指针作为函数参数
在函数调用时把某几个函数的首地址传递给被调用函数,在被调用函数中就可以调用这几个函数了。
程序:编制函数func(),调用实现不同的功能:max,min,sum.
代码如下:
#include<stdio.h>
int max(int a, int b);
int min(int a, int b);
int sum(int a, int b);
void func(int a, int b, int(*fun)(int a, int b));
int main()
{
	int x, y;
	printf("enter 2 num:\n");
	scanf_s("%d%d", &x, &y);
	printf("max = ");
	func(x, y, max);//max必须先定义为一个函数,以下同理
	printf("min = ");
	func(x, y, min);
	printf("sum = ");
	func(x, y, sum);
}
void func(int a, int b, int (* fun)(int a, int b))
{
	int result;
	result = (*fun)(a, b);
	printf("%d\n", result);
}
int max(int a, int b)
{
	int c;
	c = (a > b) ? a : b;
	return c;
}
int min(int a, int b)
{
	int c;
	c = (a < b) ? a : b;
	return c;
}
int sum(int a, int b)
{
	int c;
	c = a + b;
	return c;
} 
第一次调用func函数时,除了将x,y传递给形参a,b外,还将函数名max作为实参传递给形参fun,这是fun指向函数max();此时,func函数中的(*fun)(a,b)相当于max(a,b).
3、返回指针值的函数
一般定义类型为:
类型名 *函数名(参数表)
例如:int *maxc(int x, int y)表示调用后可以得到一个指向整型数据的指针(地址)。
*的运算级低于(),因此maxc先于()结合,表明maxc是函数名。*表示此函数返回值类型是指针。
程序:下列函数把两个整数形参中较大的那个数的地址作为函数值传回
#include<stdio.h>
int main()
{
	int* maxc(int x, int y);
	int* p, i, j;
	printf("enter two number\n");
	scanf_s("%d%d" ,&i, &j);
	p = maxc(i, j);//p作为地址
	printf("max=%d\n", *p);
	return 0;
}
int* maxc(int x, int y)
{
	int* z;
	if (x > y)
		z = &x;
	else
		z = &y;
	return z;
} 
结果如下:




![Ubuntu 安装“安装程序向硬盘复制文件时遇到错误[Errno 5] Input/output error”错误解决过程记录](https://img-blog.csdnimg.cn/be68b0075b874a8883c3c99edeeed803.png)















