C语言中的指针-返回指针值的函数-学习笔记-38

引入

我们知道,大多数函数都有返回值,可以是整型、字符型等等,其实指针型也可以作为函数的返回值来使用,当然,返回的就是指针,也就是地址。

定义

我们如何定义一个函数呢?

1
int a ( int x, int y);

上面,我们定义了一个返回值为整型的函数 a,包含两个参数,x 和 y。如果改成

1
int *a(int x, int y);

a 的左右有 和 ( ) ,根据符号优先级,a 先与括号组成一个函数 a,在与号组成一个指针型函数,即这个函数是一个指针函数,返回的值是一个指着你地址,前面的 int ,表示这个函数返回的地址是一个 int 型地址。所以,要定一个一个返回指针值的函数的一般形式是:

类型名 * 函数名 ( 参数列表 )

上面说的可能比较晕,我们通过一个例子来说明。

使用

有3个学生,4门课,要求输入学生号之后,返回学生所有成绩,用指针的方式解决。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
int main(){
int student[3][4]={{66,77,88,99},{55,67,57,89},{66,78,45,99}};
int stu_num;
int *p;
int * search(int num, int (*p)[4]);
printf("请输入要查询的考生编号:\n");
scanf("%d",&stu_num);
p=search(stu_num,student);
printf("%d 号考生的成绩是:\n",stu_num);
for (int i=0;i<4;i++){
printf("第%d 门:%d\n",i+1,p[i]);
}
}
int *search(int num,int (*p)[4]){
return *(p+num-1);
}

我们看到,search 函数的形参,是一个包含4个元素的指针变量,我们通过把二维数组的行地址传递给 search,然后 search 函数将行地址移动到需要的位置,再返回该行地址,通过下标法引用这个行地址中的元素。
我们输入的实参是一组地址,函数将地址移动到我们需要的位置,再把地址返回给主调函数。这就是返回指针值的函数。

需要注意的是,在上面的例子中,我们操作多维数组,一定要搞清楚,当前操作的是行元素还是列元素,*号该如何添加,如果写错就会出现大问题。

如果我们把上面的 search 函数改为

1
2
3
4
5
6
7
8
int *search(int num,int (*p)[4]){
return *(p+num-1);
}
//改为
int *search(int num,int (*p)[4]){
return (*p+num-1);
}
//这里再返回的,就不是行元素地址了,而是列元素的地址了。

请务必注意,不要犯上面的错误。

尾巴

这是我的个人学习笔记,主要是应付考研复习使用,充斥着一些吐槽和个人观点,并不严谨,欢迎大家参考、指正。


-------------The End-------------
欢迎请我喝咖啡哦~!