现在的位置: 首页 > 综合 > 正文

返回指针的函数

2013年09月12日 ⁄ 综合 ⁄ 共 1478字 ⁄ 字号 评论关闭

    

 返回指针的函数

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

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

类型说明符 *函数名(形参表)  
{  
   …      /*函数体*/  
} 

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

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

  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】

#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  用指针操作字符串
【责任编辑:云霞 TEL:(010)68476606】

抱歉!评论已关闭.