一、函数指针
1、介绍
在C语言中,一个函数总是占用一段连续的内存区,而函数名就是该函数所占内存区的首地址。我们可以把函数的这个首地址(或称入口地址)赋予一个指针变量,使该指针变量指向该函数。然后通过指针变量就可以找到并调用这个函数。我们把这种指向函数的指针变量称为“函数指针变量”。函数名是指向函数的指针,调用函数时,就是在使用函数指针。
2、定义
类型说明符 (*指针变量名)();
这个定义和指针变量的定义的主要区别就是多最后一个“()”即空括号,空括号表示指针变量所指的是一个函数。
3、举例
//
#include <stdio.h>
int max(int a, int b)
{
if (a > b)
return a;
else
return b;
}
int main()
{
int max(int a, int b);
int (*pmax)();
pmax = max;
int x, y, z;
printf("Please input two number: \n");
scanf("%d %d", &x, &y);
z = (*pmax)(x, y);
printf("maxnum = %d\n", z);
return 0;
}
//
二、指针型函数
1、介绍
函数类型是指函数返回值的类型。在C语言中允许一个函数的返回值是一个指针(即地址),这种返回指针值
的函数称为指针型函数。
2、定义
类型说明符 *函数名(形参表)
{
…… /* 函数体 */
}
函数名之前加了“*”号表明这是一个指针型函数,即返回值是一个指针。
3、举例
//
#include <stdio.h>
#include <stdlib.h>
char *dayName(int n)
{
static char *name[] = {
"Illegal day",
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Saturday",
"Sunday"
};
return ((n < 1 || n > 7) ? name[0] : name[n]);
}
int main()
{
int i;
char *dayName(int n);
printf("input day num: \n");
scanf("%d", &i);
if(i < 0)
exit(1);
printf("day num %2d is %s\n", i, dayName(i));
return 0;
}
//
致谢
1、《C语言程序设计》[第四版],作者谭浩强