参数指针怎么返回C语言,C语言--返回指针的函数--指针函数

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

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

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

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

例如:

int * a(int x, int y)

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

例题1:

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

# include

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学生的数组的首元素。

}

3bf46a5bef3445bea581cbca69eb7e85.png

程序解释:

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

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

例题2:

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

# include

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;

}

3c55a402f841414e9f11a966baeb669f.png

程序解释:

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

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值