返回指针值的函数

使用方法

一个函数可以返回一个整形值、字符值、实型值等,也可以返回指针型的数据,即地址。

这种返回指针值的函数,一般定义形式为:

1
类型名 * 函数名 ( 参数列表 ) 例如 int *a( int x,int y);

a 是函数名,调用它以后能得到一个指向整形数据的指针(地址)。( ) 的优先级高于 *所以a(int x,int y)是函数,前面加个*,表示此函数是指针型函数(函数值是指针)。最前面的 int 表示返回的指针指向整形变量。

例子

例:有若干学生的成绩(每个学生有4门成绩),要求在用户在输入学生序号以后,能输出该学生的全部成绩。用指针函数来实现。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <stdio.h>
#include <stdlib.h>
int main()
{
float score[][4]={{60,70,80,90},{56,89,67,88},{34,78,90,66}};
float *search(float (*pointer)[4],int n); //函数声明
float *p;
int i,m;
printf("enter the number of student:");
scanf("%d",&m);
printf("The score of No.%d are:\n",m);
p = search(score,m); //函数调用
for(i=0;i<4;i++)
printf("%5.2f\t",*(p+i));
printf("\n");
return 0;
}
float *search(float (*pointer)[4],int n)
{
float *pt;
pt = *(pointer+n);
return(pt);
}

函数 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,ptpointer的区别。

热评文章