鱼C论坛

 找回密码
 立即注册

返回指针值的函数

已有 586 次阅读2013-2-1 15:54

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

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

  类型名 * 函数名 ( 参数列表 )     例如 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的区别。


路过

雷人

握手

鲜花

鸡蛋

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 立即注册

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-16 19:08

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

返回顶部