人之所以痛苦,那是因为你在成长。--------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返回到主函数,将此同学的学号和成绩都打印出来。

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

C语言--返回指针的函数--指针函数相关推荐

  1. 【C 语言】字符串模型 ( strstr-while 模型 | 抽象函数模型 | 业务子函数接口定义要点 | 形参指针间接赋值 | 返回值状态 | 形参指针处理 | 形参指针判空 | 形参返回值 )

    文章目录 前言 一.业务子函数接口定义要点 二.完整代码示例 前言 字符串开发模型 : strstr-while/do-while 模型 : 在 字符串 中 查找 子串特征 ; 两头堵模型 : 两个指 ...

  2. matlab二重指针,VC++中函数返回数组指针或者带指针的结构体的编译方式是否可取? - 程序语言 - 小木虫 - 学术 科研 互动社区...

    libralibra 构造函数+析构函数应该是比较正规的做法吧, 你的结构体/类被提早释放的问题,是不是那个结构体是局部变量,当超出作用域时对象被销毁,如果存在析构函数,会被默认调用, 如果你返回结构 ...

  3. C语言学习笔记10-指针(动态内存分配malloc/calloc、realloc、释放free,可变数组实现;Tips:返回指针的函数使用本地变量有风险!;最后:函数指针)

    C语言:指针 1. 指针:保存地址的变量 *p (pointer) ,这种变量的值是内存的地址.   取地址符& 只用于获取变量(有地址的东西)的地址:scanf函数-取地址符   地址的大小 ...

  4. C语言通过指针间接的实现函数返回多个值

    C语言通过指针间接的实现函数返回多个值 本例题中通过把指针作为函数参数来传递,依次达到改变变量的值的目的,最后实现一个函数返回两个变量的值 int *X,*X应该被看成一个整体来看,表示一个整形. # ...

  5. c语言指针,return以及函数返回值

    指针作为c语言的精华所在所以会多学习几天来扎实的掌握 void* 这不叫空指针,这叫无确切类型指针.这个指针指向一块内存,却没有告诉程序该用何种方式来解释这片内存.所以这种类型的指针不能直接进行取内容 ...

  6. c语言 一个函数返回结构体指针,详解C语言结构体中的函数指针

    结构体是由一系列具有相同类型或不同类型的数据构成的数据集合.所以,标准C中的结构体是不允许包含成员函数的,当然C++中的结构体对此进行了扩展.那么,我们在C语言的结构体中,只能通过定义函数指针的方式, ...

  7. open函数返回-1_深入浅出剖析C语言函数指针与回调函数

    微信公众号:杨源鑫如果你觉得本文对你有帮助,欢迎留言探讨! 一.C语言回调函数 什么是回调函数? 百度的权威解释如下: 回调函数就是一个通过函数指针调用的函数.如果你把函数的指针(地址)作为参数传递给 ...

  8. C语言返回指针的函数,指针函数,让一个函数返回一个字符串

    C语言函数返回指针的函数(指针函数) 什么是返回指针的函数 一个函数可以返回一个整形值 字符型值 实型值 1.如果一个函数它的返回值是一个地址(是一个指针的话),这个函数是一个返回值是指针即指针函数. ...

  9. 【C 语言】内存四区原理 ( 栈内存与堆内存对比示例 | 函数返回的堆内存指针 | 函数返回的栈内存指针 )

    文章目录 一.函数返回的堆内存指针 二.函数返回的栈内存指针 一.函数返回的堆内存指针 在 main 主函数中 , 调用 get_memory 子函数 , 返回 malloc 初始化的堆内存 , 可以 ...

  10. C语言函数指针和返回指针值的函数

    一.用函数指针变量调用函数 一个函数,在编译的时候 ,系统会给这个函数分配一个入口地址,这个入口地址就称为函数的指针(地址).既然有地址,那么我们可以定义一个指针变量指向该函数,然后,我们就可以通过该 ...

最新文章

  1. 试玩 go-socks5
  2. LeetCode 684. Redundant Connection
  3. hhkb mac设置_我最爱的HHKB
  4. 【机房重构】关于App.config配置文件
  5. 谷歌TPU2代有望取代英伟达GPU?测评结果显示…
  6. 十分钟带你理解Kubernetes核心概念
  7. 为什么人人都要有产品思维?
  8. paip.提升用户体验---搜索功能设计
  9. windows2003 64位+iis6 php环境搭建
  10. 电脑 Google浏览器 截长屏 无任何辅助软件
  11. 微信小程序 # 仿写微信通讯录页面(字母侧栏效果)
  12. 【腾讯笔试题】记腾讯2019年暑假实习移动端开发在线笔试题
  13. 简单功能强大的jQuery在线图片裁剪插件croppic
  14. EBS R12中SLA子分类帐与子模块的关联关系
  15. Mac必备开源鼠标手势软件 MacStroke
  16. android源码分卷压缩和解压
  17. 一文带你明白什么是浏览器插件?
  18. 《工业控制系统信息安全防护指南》实施建议 (上)
  19. Centos6 yum源设置
  20. 《推荐系统实战》读书笔记——在隐式反馈系统中如何给商品打分

热门文章

  1. Keychron K3 Pro
  2. LibQQt系列之四《一个应用案例》
  3. 新一代 PaaS 平台 Tanzu Application Platform初探
  4. kindeditor java ssm_easyUI整合富文本编辑器KindEditor详细教程(附源码)
  5. 阿里云环境下搭建HadoopHA集群
  6. 15-VMware Horizon 2203 虚拟桌面-Win10 自动桌面池完整克隆浮动(十五)
  7. 我用【c++】写出了会说话的学生考勤系统
  8. jvm内存与垃圾回收重点总结
  9. D3D9 GPU Hacks
  10. 如何做一名合格的甲方项目经理