1. 指针函数
函数可以返回整型值、字符型值、实型值,也可以返回指针,即地址。返回地址的函数的一般定义形式:
类型名 *f(int i, int j);
调用该函数后,返回一个指向整型变量的指针。()的优先级要高于*,因此f先与()结合,这表示f是一个函数。函数名前有一个*,表示此函数的返回值类型为指针,下面实例演示了返回指针的函数功能实现。
程序代码如下:
#include <stdio.h>
char *name[7] = {
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Saturday",
"Sunday"
};
char *message = "wrong input";
char *week(int day)
{
if (day < 0 || day > 7 || day == 0)
return message;
else
return name[day - 1];
}
int main(void)
{
int day;
char *p;
printf("input a number of a week:\n");
scanf("%d", &day);
p = week(day);
printf("%s\n", p);
return 0;
}
|
2. 函数指针
指向函数的指针是一个指针变量,这个指针比较特殊,它指向一个函数。一个函数的函数名是一个指针,它指向函数的代码。函数的调用可以通过函数来调用也可以通过指向函数的指针来调用。
後向函数的指针其定义的一般形式为:
类型名(*指针变量名) ();
例如: int(*p)(int i, int j);
p是一个指针,它指向的一个函数, 这个函数有两个整型参数,返回类型为int。我们注意到p首先和*结合,表明p是一个指针。然后再与()结合,表明它指向的是一个函数。指向函数的指针也称为函数指针,下面实例实现了指向函数的指针的功能。
程序代码1 如下:
#include <stdio.h>
#define GET_MAX 0
#define GET_MIN 1
int get_max(int i, int j)
{
return i > j ? i : j;
}
int get_min(int i, int j)
{
return i > j ? j : i;
}
int compare(int i, int j, int flag)
{
int ret;
int (*p)(int, int);
if (flag == GET_MAX)
p = get_max;
else
p = get_min;
ret = p(i, j);
return ret;
}
int main(void)
{
int i = 5, j = 10, ret;
ret = compare(i, j, GET_MAX);
printf("The MAX is %d \n", ret);
return 0;
}
|
程序代码2 如下:
#include <stdio.h>
int get_big(int i, int j)
{
return i > j ? i : j;
}
int get_max(int i, int j, int k, int (*p)(int, int))
{
int ret;
ret = p(i, j);
ret = p(ret, k);
return ret;
}
int main(void)
{
int i = 5, j = 10, k = 15, ret;
ret = get_max(i, j, k, get_big);
printf("The max is %d\n", ret);
return 0;
}
|
阅读(335) | 评论(0) | 转发(0) |