其中函数名之前加了“*”号表明这是一个指针型函数,即返回值是一个指针。类型说明符
表示了返回的指针值所指向的数据类型。
如:
int *ap(int x,int y)
{
...... /*函数体*/
}
表示 ap 是一个返回指针值的指针型函数,它返回的指针指向一个整型变量。
【例 10.32】本程序是通过指针函数,输入一个 1~7 之间的整数,输出对应的星期名。
main(){
int i;
char *day_ncom(int n);
printf("input Day No:\n");
scanf("%d",&i);
if(i<0) exit(1);
谭浩强 C 语言程序设计 2001 年 5 月 1 日
printf("Day No:%2d-->%s\n",i,day_ncom(i));
}
char *day_ncom(int n){
static char *ncom[]={ "Illegal day",
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Saturday",
"Sunday"};
return((n<1||n>7) ? ncom[0] : ncom[n]);
}
本例中定义了一个指针型函数 day_ncom,它的返回值指向一个字符串。该函数中定义
了一个静态指针数组 ncom。ncom 数组初始化赋值为八个字符串,分别表示各个星期名及出
错提示。形参 n 表示与星期名所对应的整数。在主函数中,把输入的整数 i 作为实参,在
printf 语句中调用 day_ncom 函数并把 i 值传送给形参 n。day_ncom 函数中的 return 语句
包含一个条件表达式,n 值若大于 7 或小于 1 则把 ncom[0]指针返回主函数输出出错提示字
符串“Illegal day”。否则返回主函数输出对应的星期名。主函数中的第 7 行是个条件语句,
其语义是,如输入为负数(i<0)则中止程序运行退出程序。exit 是一个库函数,exit(1)表
示发生错误后退出程序,exit(0)表示正常退出。
应该特别注意的是函数指针变量和指针型函数这两者在写法和意义上的区别。如
int(*p)()和 int *p()是两个完全不同的量。
int (*p)()是一个变量说明,说明 p 是一个指向函数入口的指针变量,该函数的返回
值是整型量,(*p)的两边的括号不能少。
int *p()则不是变量说明而是函数说明,说明 p 是一个指针型函数,其返回值是一个
指向整型量的指针,*p 两边没有括号。作为函数说明,在括号内最好写入形式参数,这样
便于与变量说明区别。
对于指针型函数定义,int *p()只是函数头部分,一