函数指针
1) 函数指针:本质是一个指针,但这个指针指向的是函数,并不是普通的基本数据类型或者类对象。
( 函数指针可以像一般函数一样,用于调用函数、传递参数。)
2) 定义:type (*func)(type , type )
eg:int (*fun)(int a, int b); // 声明函数指针
// 该函数指针 fun 是一个指向(返回值为整型,有两个参数类型都是整型)的函数
3)代码:
a.函数指针直接调用
#include<stdio.h>
int max(int x, int y)
{
return x > y ? x : y;
}
int main(void)
{
/* p 是函数指针 */
int(*p)(int, int) = &max; // &可以省略
int a, b, c, d;
printf("please input 3 numbers:");
scanf("%d %d %d", &a, &b, &c);
/* 与直接调用函数等价,d = max(max(a, b), c) */
d = p(p(a, b), c);
printf("the maxumum number is: %d\n", d);
return 0;
}
b.函数指针作为参数
#include<stdio.h>
int compare(int* a, int* z)
{
return *a < *z ? 1 : 0;
}
int *maximum(int* begin, int* end, int(*compare)(int*, int*))
//函数指针 compare 是一个指向(返回值为整型,有两个参数类型都是指针型)的函数
{
int* result = begin;
while (begin != end)
{
if (compare(result, begin))
{
result = begin;
}
++begin;
}
return result;
}
int main()
{
int data[8] = { { 0 },{ 1 },{ 2 },{ 3 },{ 8 },{ 5 },{ 6 },{ 7 } };
int* max;
max = maximum(data + 0, data + 8, &compare);
printf("%d\n", *max);
return 0;
}
指针函数
1) 指针函数:本质是一个函数,但这个函数返回的是一个对应类型的地址(返回一个地址给调用者)。
2) 定义:type *func (type , type)
eg:int *fun(int a, int b); //声明指针函数 也可写成 int* fun(int a, int b);
// fun是函数名,返回值是一个int类型的指针
3)代码:
#include<stdio.h>
float *find(float(*pionter)[4], int n)//find()被定义为指针函数 pointer是指向包含4个元素的一维数组的指针变量
{
float *pt;
pt = *(pionter + n);// pointer+n 指向 score 的第 n+1 行 pt[i]表示第 i 行
return pt;
}
int main()
{
static float score[][4] = { { 60,70,80,90 },{ 56,89,34,45 },{ 34,23,56,45 } };
float *p;
int i, m;
printf("Enter the number to be found:");
scanf_s("%d", &m);
printf("the score of NO.%d are:\n", m);
p = find(score, m - 1);//find(score,1)表示第二位学生成绩
for (i = 0; i < 4; i++)
{
//printf("%5.2f\t", *(p + i));
printf("%5.2f\t", p[i]);// p[i] 表示第 m-1 位学生的第 i 门成绩
}
printf("\n");
return 0;
}
总结:
函数指针与指针函数的最大区别是:函数指针的函数名是一个指针,即函数名前面有一个指针类型的标志型号“*”。
(ps:函数指针的返回值也可以是指针)