返回指针的函数
每个函数可返回一个值,返回值可以是char、int、float、double等类型,当将返回值类型设置为void时,表示函数没有返回值。在C语言中,还允许一个函数的返回值是一个指针(即地址),这种返回指针的函数称为指针型函数。
定义指针型函数的形式如下:
- 类型说明符 *函数名(形参表)
- {
- … /*函数体*/
- }
其中函数名之前加了"*"号表明这是一个指针型函数,即返回值是一个指针。类型说明符表示了返回的指针值所指向的数据类型。一般用这种函数返回一个字符串常量的首地址。
编写一个函数,用于将阿拉伯数字表示的月份转换为对应的英文名称。函数一次只能返回一个值,若要返回一个字符串(由多个字符组成),用前面已介绍的方法可通过函数的形参返回多个字(包括一个字符串)。例如,用以下的函数头:
- void cmonth(int month, char s[])
要调用以上形式的函数,首先要定义一个数组,再将数组作为实参传给函数,最后将函数处理的结果用另一个语句输出。使用类似下面的程序:
- char s[20];
- cmonth(5, s]);
- printf("月份:%2d-->英文名称:%s\n",5,s);
如果函数能返回字符串,则可以使用以下方式调用函数,并输出返回值:
- printf("月份:%2d-->英文名称:%s\n",i,cmonth(i));
编写指针型函数可返回字符串的首地址,下面的程序演示指针型函数的编写方法。
【程序9-27】
- #include <stdio.h> //头文件
- #include <stdlib.h>
- char *cmonth(int month);//函数声明
- int main()
- {
- int i;
- printf("输入月份数字:");
- scanf("%d",&i); //输入月份
- printf("月份:%2d-->英文名称:%s\n",i,cmonth(i));
- system("pause");
- return 0;
- }
- char *cmonth(int month)//自定义函数
- {
- char *str_month[]={//初始化
- "Illegal Month",
- "January",
- "February",
- "March",
- "April",
- "May",
- "June",
- "July",
- "August",
- "September",
- "October",
- "November",
- "December"
- };
- char *p;
- if(month>=1 && month<=12) //判断是否合法
- p=str_month[month];
- else
- p=str_month[0];
- return p;
- }
执行这段程序,按照提示输入月份数字,得到如下结果,如图所示。
在该程序中,定义了函数cmonth(),该函数需要一个整型变量作为实参,返回一个字符型指针。在函数体内部定义指针数组,数组中的每个指针指向一个字符串常量。然后,判断实参month是否合法,若不合法则将第一个元素赋值给字符指针变量p,这样,指针变量p中的值就与指针数组中第一个元素中的值相同,即指向字符串常量"Illegal Month",如图9-54所示。当函数参数month为1~12之间的一个值时,即可使字符指针指向对应的字符串常量(变量p中保值的值是一个地址)。
main()函数中,在printf()函数输出列表中包括cmonth()函数的返回值(其返回值是一个字符串的首地址),printf()函数的格式字符"%s"从该首地址开始输出字符串。
图9-53 执行结果 |
图9-54 用指针操作字符串 |