一、函数指针
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语言程序设计》[第四版],作者谭浩强