返回指针的函数

 返回指针的函数

每个函数可返回一个值,返回值可以是char、int、float、double等类型,当将返回值类型设置为void时,表示函数没有返回值。在C语言中,还允许一个函数的返回值是一个指针(即地址),这种返回指针的函数称为指针型函数。

定义指针型函数的形式如下:

[cpp]  view plain copy
  1. 类型说明符 *函数名(形参表)    
  2. {    
  3.    …      /*函数体*/    
  4. }   


其中函数名之前加了"*"号表明这是一个指针型函数,即返回值是一个指针。类型说明符表示了返回的指针值所指向的数据类型。一般用这种函数返回一个字符串常量的首地址。

编写一个函数,用于将阿拉伯数字表示的月份转换为对应的英文名称。函数一次只能返回一个值,若要返回一个字符串(由多个字符组成),用前面已介绍的方法可通过函数的形参返回多个字(包括一个字符串)。例如,用以下的函数头:

 
 
  1. void cmonth(int month, char s[]) 

要调用以上形式的函数,首先要定义一个数组,再将数组作为实参传给函数,最后将函数处理的结果用另一个语句输出。使用类似下面的程序:

 
 
  1. char s[20];  
  2. cmonth(5, s]);  
  3. printf("月份:%2d-->英文名称:%s\n",5,s); 

如果函数能返回字符串,则可以使用以下方式调用函数,并输出返回值:

 
 
  1. printf("月份:%2d-->英文名称:%s\n",i,cmonth(i)); 

编写指针型函数可返回字符串的首地址,下面的程序演示指针型函数的编写方法。

【程序9-27】

[cpp]  view plain copy
  1. #include <stdio.h>  //头文件    
  2. #include <stdlib.h>   
  3.    
  4. char *cmonth(int month);//函数声明    
  5.    
  6. int main()    
  7. {    
  8.     int i;    
  9.    
  10.     printf("输入月份数字:");    
  11.     scanf("%d",&i); //输入月份    
  12.     printf("月份:%2d-->英文名称:%s\n",i,cmonth(i));    
  13.    
  14.     system("pause");    
  15.     return 0;    
  16. }    
  17.    
  18. char *cmonth(int month)//自定义函数    
  19. {    
  20.     char *str_month[]={//初始化    
  21.                     "Illegal Month",    
  22.                     "January",    
  23.                     "February",    
  24.                     "March",    
  25.                     "April",    
  26.                     "May",    
  27.                     "June",    
  28.                     "July",    
  29.                     "August",    
  30.                     "September",    
  31.                     "October",    
  32.                     "November",    
  33.                     "December"    
  34.                    };    
  35.     char *p;    
  36.    
  37.     if(month>=1 && month<=12)       //判断是否合法    
  38.         p=str_month[month];    
  39.     else    
  40.         p=str_month[0];    
  41.     return p;    
  42. }   



执行这段程序,按照提示输入月份数字,得到如下结果,如图所示。

在该程序中,定义了函数cmonth(),该函数需要一个整型变量作为实参,返回一个字符型指针。在函数体内部定义指针数组,数组中的每个指针指向一个字符串常量。然后,判断实参month是否合法,若不合法则将第一个元素赋值给字符指针变量p,这样,指针变量p中的值就与指针数组中第一个元素中的值相同,即指向字符串常量"Illegal Month",如图9-54所示。当函数参数month为1~12之间的一个值时,即可使字符指针指向对应的字符串常量(变量p中保值的值是一个地址)。

main()函数中,在printf()函数输出列表中包括cmonth()函数的返回值(其返回值是一个字符串的首地址),printf()函数的格式字符"%s"从该首地址开始输出字符串。

 
图9-53  执行结果
 
图9-54  用指针操作字符串
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值