通常,有返回值的函数的返回值的类型多为int,float或char。函数的返回值也可以是一个指针类型的值(即地址)。定义一个返回指针值的函数与定义一般函数的格式基本类似,只是需要在函数名前加*,用来表明该函数的返回值是指针。
声明格式:
数据类型*函数名(形参表列)
{函数体;}
其中,函数名之前加了“*”号表明这是一个指针型函数,即返回值是一个指针。类型说明符表示了返回的指针值所指向的数据类型。返回类型可以是任何基本类型和复合类型。返回指针的函数的用途十分广泛。事实上,每一个函数,即使它不带有返回某种类型的指针,它本身也有一个入口地址,该地址相当于一个指针。比如,函数返回一个整型值,实际上也相当于返回一个指针变量的值,不过这时的变量是函数本身,即整个函数相当于一个“变量”。
例如:
int*p(int x,int y)
{
·
· //函数体
·
}
表示p是一个返回指针值的指针型函数,它返回的指针指向一个整型变量。请注意在*p的两侧没有括号,其两侧分别为“*”运算符和“()”运算符。“()”运算符的优先级高于“*”运算符,因此p先与()结合,很显然这是函数形式。而“*”则表示该函数为指针型函数。
【例7.25】查找星期的英文名字。
程序内容如下:
1 #include<stdio.h>
2 char*week_name(int n)
3 {
4 static char a[][10]={"Sunday","Monday","Tuesday","Wednesday",
"Thursday","Friday","Saturday"};
5 return a[n];(www.xing528.com)
6 }
7 void main()
8 {
9 char*week_name(int n);
10 int x;
11 printf("请输入一个整数(0-6):");
12 scanf("%d",&x);
13 if(x>=0&&x<=6)
14 printf("这是%s!",week_name(x));
15 else
16 printf("输入错误!");
17 }
程序结果如图7.30所示:
图7.30 例7.25程序结果图
【例题中关键问题说明】
(1)在程序中定义了一个指针型函数week_name,它的返回值指向一个字符串。该函数中定义了一个静态指针数组a。a数组初始化赋值为7个字符串,分别表示各个星期名及出错提示。形参n表示与星期名所对应的整数。
(2)在主函数中,把输入的整数x作为实参,在printf语句中调用week_name函数并把x值传送给形参n。week_name函数中的return语句返回主函数输出对应的星期名。
应该特别注意的是函数指针变量和指针型函数这两者在写法和意义上的区别。如int(*p)()和int*p()是两个完全不同的量。int(*p)()是一个变量说明,说明p是一个指向函数入口的指针变量,该函数的返回值是整型量,(*p)的两边的括号不能少。int*p()则不是变量说明而是函数说明,说明p是一个指针型函数,其返回值是一个指向整型量的指针,*p两边没有括号。作为函数说明,在括号内最好写入形式参数,这样便于与变量说明区别。对于指针型函数定义,int*p()只是函数头部分,一般还应该有函数体部分。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。