C语言中的指针型函数值
本文节选自《21天学通C语言》一书
函数的函数返回值也可以是指针型的数据,即地址。返回该类型值时,执行机制与返回其他类型完全相同。含有指针型函数值的函数的声明一般为:
数据类型 * 函数名(形参列表);
其中,数据类型和指针操作符组成指针类型。例如:
int * max(int a, int b, int c);
此max函数中的return语句必须返回一个变量的地址或一个指针变量的值。范例14-6演示了如何使用指针变量作为函数返回值。
【范例14-6】使用指针变量作为函数返回值,实现方法如示例代码14-6所示。
示例代码14-6
01 #include <stdio.h>
02
03 /* 求最大数的地址 */
04 int * max(int * a, int * b, int * c) {
05 int * p = NULL;
06
07 if (*a > *b) /* 如果a指向值较大,将p设为a */
08 p = a;
09 else /* 如果b指向值较大,将p设为b */
10 p = b;
11
12 if (*p < *c) /* 如果c指向值较大,将p设为c */
13 p = c;
14
15 return p;
16 }
17
18 int main(void) {
19 int a = 0; /* 定义并初始化a */
20 int b = 0; /* 定义并初始化b */
21 int c = 0; /* 定义并初始化c */
22 int * p = NULL;
23
24 /* 从标准输入读取个数值赋值给a、b和c */
25 printf("Please input three integers:");
26 scanf("%d", &a); /* 读入a */
27 scanf("%d", &b); /* 读入b */
28 scanf("%d", &c); /* 读入c */
29
30 /* 求a,b和c的最大值 */
31 p = max(&a, &b, &c); /* 调用max函数 */
32 printf("The max. is %d./n", *p); /* 输出函数执行结果 */
33
34 return 0;
35 }
【运行结果】程序运行后,输入三个数,“531”,得到结果。
【代码解析】本程序实现了一个求最大数地址的max函数。该函数以指针类型变量作为函数值,形参为三个int型指针变量。在函数中将三个指针指向的值做比较并找到最大值,将指向该值的指针返回。
在max函数中:
第7~10行,先比较a和b指向的值,将p赋值为指向的值较大的指针变量。
第12~13行,如果p指向的变量小于c指向的变量,将p赋值为c的值。