指针函数
函数的返回值可以是整型值、浮点类型值、字符类型值等,在C语言中还允许一个函数的返回值是一个指针(地址),这种返回指针的函数称为指针函数。
指针函数的声明格式如下所示:
基类型* 函数名(参数列表);
从上面的声明格式可以看出,函数名之前加了符号“*”表明函数的返回值是一个指针,基类型表示了返回的指针所指向的数据类型。
下面通过一段代码演示如何定义指针函数。
int* func(int x, int y)
{
/* 函数体 */
}
上面的代码定义了func()函数,该函数是一个返回指针的函数,它返回的指针指向一个整型变量。指针函数的应用非常广泛,如前面学习的内存申请函数,这些函数的返回值均为指针类型。
下面通过一个案例来了解指针函数如何使用,该案例要求计算一个int类型数组的最大值,并返回其地址,案例具体实现如例1所示。
例1 ptrfunc.c
1 #include <stdio.h>
2 int * func(int * arr, int size)
3 {
4 int * p = arr;
5 for (int i = 0; i < size; i++) //通过for循环查找数组中最大值
6 {
7 if (*(arr + i) > *p) //判断找到的元素是否是最大值
8 {
9 p = arr + i; //移动指针
10 }
11 }
12 return p; //将最大元素的地址返回
13 }
14 int main()
15 {
16 int arr[5] = { 9, 8, 3, 5, 2 };
17 int * p = func(arr, 5); //调用func()函数
18 printf("数组中最大的元素是 %d,其地址是 %p\n", *p, p);
19 return 0;
20 }
例1的运行结果如图1所示。
图1 例1运行结果
在例1中,第2-13行代码定义了func()函数,该函数的功能是从数组中找出最大的元素,返回该元素的地址;第16行代码定义并初始化了数组arr;第17行代码定义了指针变量p,并将func()函数的返回值赋给p;第18行代码调用printf()函数输出数组最大元素及其地址。从图7-28可以看出,数组arr中最大的元素的值及其地址都被打印出来了,说明函数可以用指针作为其返回值。