前面我们介绍过,所谓函数类型是指函数返回值的类型。在C语言中允许一个函数的返回值是一个指针(即地址),这种返回指针值的函数称为指针型函数。
定义指针型函数的一般形式为:
类型说明符 *函数名(形参表)
{
…… /*函数体*/
}
其中函数名之前加了“*”号表明这是一个指针型函数,即返回值是一个指针。类型说明符表示了返回的指针值所指向的数据类型。
如:
int *ap(int x, int y)
{
...... /*函数体*/
}
表示 ap 是一个返回指针值的指针型函数,它返回的指针指向一个整型变量。
【例】本程序是通过指针函数,输入一个 1~7 之间的整数,输出对应的星期名。
#include <stdio.h>
#include <stdlib.h>
int main(){
int i;
char *day_name(int n);
printf("input Day No:\n");
scanf("%d", &i);
if(i < 0) exit(0);
printf("Day No:%2d-->%s\n", i, day_name(i));
return 0;
}
char *day_name(int n) {
static char *name[] = {
"Illegal day",
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Saturday",
"Sunday"
};
return((n < 1 || n > 7) ? name[0] : name[n]);
}
本例中定义了一个指针型函数 day_name,它的返回值指向一个字符串。该函数中定义了一个静态指针数组 name。name 数组初始化赋值为八个字符串,分别表示各个星期名及出错提示。形参 n 表示与星期名所对应的整数。在主函数中,把输入的整数 i 作为实参,在printf 语句中调用 day_name 函数并把 i 值传送给形参 n。day_name 函数中的 return 语句包含一个条件表达式,n 值若大于 7 或小于 1 则把 name[0]指针返回主函数输出出错提示字符串“Illegal day”。否则返回主函数输出对应的星期名。主函数中的第 7 行是个条件语句,其语义是,如输入为负数(i<0)则中止程序运行退出程序。exit 是一个库函数,exit(1)表示发生错误后退出程序,exit(0)表示正常退出。
应该特别注意的是函数指针变量和指针型函数这两者在写法和意义上的区别。如int(*p)()和 int *p()是两个完全不同的量。
int (*p)()是一个变量说明,说明 p 是一个指向函数入口的指针变量,该函数的返回值是整型量,(*p...
掌握本节内容
登录后开始许愿
暂无评论,来抢沙发