返回指针值的 函数
一个函数可以返回一个整形值、字符值、实型值等,也可以返回指针型的数据,即地址。
这种返回指针值的函数,一般定义形式为
类型名 * 函数名 ( 参数列表 ) 例如 int *a( int x,int y);
a 是函数名,调用它以后能得到一个指向整形数据的指针(地址)。( ) 的优先级高于 * 所以a(int x,int y)是函数,前面加个 *,表示此函数是指针型函数(函数值是指针)。最前面的 int 表示返回的指针指向整形变量。
例:有若干学生的成绩(每个学生有4门成绩),要求在用户在输入学生序号以后,能输出该学生的全部成绩。用指针函数来实现。
1 #include <stdio.h>
2 #include <stdlib.h>
3
4 int main()
5 {
6 float score[][4]={{60,70,80,90},{56,89,67,88},{34,78,90,66}};
7 float *search(float (*pointer)[4],int n); //函数声明
8 float *p;
9 int i,m;
10 printf("enter the number of student:");
11 scanf("%d",&m);
12 printf("The score of No.%d are:\n",m);
13 p = search(score,m); //函数调用
14 for(i=0;i<4;i++)
15 printf("%5.2f\t",*(p+i));
16 printf("\n");
17
18 return 0;
19 }
20
21 float *search(float (*pointer)[4],int n)
22 {
23 float *pt;
24 pt = *(pointer+n);
25 return(pt);
26 }
函数 float *search( float (*pointer)[4] , int n ); search 被定义为指针型函数,它的形参 float (*pointer)[4] 中 pointer是指向包含4个float元素的一维数组的 指针变量。pointer+1 指向 score 数组序号为1的行。*(pointer + 1)指向1行0列元素,加了 * 号后,指针从行控制转化为了列控制。search函数中的 pt 是指向实型变量(而不是指向一维数组)的指针变量。main 函数调用 search 函数,将score数组的首行地址传递给形参pointer(注意score也是指向行的指针,而不是指向列元素的指针)。m是要查找的学生序号。调用search函数后,得到一个地址(指向第m个学生第0门成绩),返回给p。然后将此学生的4门成绩输出。注意 p 是指向列元素的指针变量,*(p+i)表示该学生的第 i 门成绩。注意指针变量p,pt和pointer的区别。