300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > C语言--返回指针的函数--指针函数

C语言--返回指针的函数--指针函数

时间:2023-07-12 10:49:49

相关推荐

C语言--返回指针的函数--指针函数

人之所以痛苦,那是因为你在成长。--------magic_guo

函数可以返回整形、字符串、实型值、无返回值、也可以返回指针类型的数据,即返回一个内存地址,像这样返回地址的函数成为指针函数。其概念与普通的函数一样,只不过返回值的类型为指针类型。

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

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

例如:

int * a(int x, int y)

根据运算符的先后等级,a先于括号结合,表示一个函数,前面的 int * 表示此函数返回一个指向整形的指针

例题1:

使用指针函数来实现:有a个学生,每个学生的b门课程的成绩,输入序号,求该学生的所有成绩:

# include <stdio.h>int main(void){float score[][4] = {{60, 70, 80, 90}, {56, 89, 67, 88}, {34, 78, 90, 66}}; //定义一个二维数组float * search(float(*pointer)[4], int n);//对于search函数的前置声明声明float * p;int i, k; printf("enter the number of student:");scanf("%d", &k);printf("The scores of No.%d are:\n", k);p = search(score, k);//调用search函数,实参为score,k。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); //pointer本来指向的是score二维数组的第0行的一维数组,所以*pointer指向的是0行一维数组的首元素的地址return pt;//返回指向n学生的数组的首元素。}

程序解释:

我们定义了search函数,该函数返回一个指向浮点型的指针;pointer是一个指向含有四个浮点型元素的一维数组,将score二维数组当做实参,search函数中,那么一开始pointer指向的是score二维数组中第0行的一维数组。再加上n,则pointer指向的是score[0+n]的那一行数组。则 * (pointer+n)则是指向了score中第n行的一维数组的首元素的地址。然后将首地址赋值给pt,由search函数返回。

在主函数main中,通过便利一维数组,将每个成绩打印出来。

例题2:

根据上题,这次不用输入序号,直接返回不及格的同学的成绩及学号。

# include <stdio.h>int main(void){float score[][4] = {{60, 70, 80, 90}, {56, 89, 67, 88}, {34, 78, 90, 66}};float * search(float (* pointer)[4]);float * p;int i, j;for (i=0; i<3; i++){p = search(score+i);if (p==*(score+i)){printf("No.%d score:", i);for (j=0; j<4; j++){printf("%5.2f ", *(p+j));}printf("\n");}}return 0;}float * search(float (*pointer)[4]){int i = 0;float * pt;pt = NULL;for (; i<4; i++){if (*(*pointer+i)<60)pt = *pointer;}return pt;}

程序解释:

定义一个search函数,该函数返回一个指向浮点型的指针,pointer是一个指向含有4个浮点型一维数组的指针。在search函数中,先将pt初始化为NULL,接下来遍历所有学生的成绩,如果有不及格的成绩,将此同学的学号记下来,即pt= * pointer;然后将pt返回到主函数,将此同学的学号和成绩都打印出来。

学习此方法,使我们会对指针和函数有一个更深的理解,灵活使用指针和函数。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。