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返回到主函数,将此同学的学号和成绩都打印出来。
学习此方法,使我们会对指针和函数有一个更深的理解,灵活使用指针和函数。
C语言--返回指针的函数--指针函数相关推荐
- 【C 语言】字符串模型 ( strstr-while 模型 | 抽象函数模型 | 业务子函数接口定义要点 | 形参指针间接赋值 | 返回值状态 | 形参指针处理 | 形参指针判空 | 形参返回值 )
文章目录 前言 一.业务子函数接口定义要点 二.完整代码示例 前言 字符串开发模型 : strstr-while/do-while 模型 : 在 字符串 中 查找 子串特征 ; 两头堵模型 : 两个指 ...
- matlab二重指针,VC++中函数返回数组指针或者带指针的结构体的编译方式是否可取? - 程序语言 - 小木虫 - 学术 科研 互动社区...
libralibra 构造函数+析构函数应该是比较正规的做法吧, 你的结构体/类被提早释放的问题,是不是那个结构体是局部变量,当超出作用域时对象被销毁,如果存在析构函数,会被默认调用, 如果你返回结构 ...
- C语言学习笔记10-指针(动态内存分配malloc/calloc、realloc、释放free,可变数组实现;Tips:返回指针的函数使用本地变量有风险!;最后:函数指针)
C语言:指针 1. 指针:保存地址的变量 *p (pointer) ,这种变量的值是内存的地址. 取地址符& 只用于获取变量(有地址的东西)的地址:scanf函数-取地址符 地址的大小 ...
- C语言通过指针间接的实现函数返回多个值
C语言通过指针间接的实现函数返回多个值 本例题中通过把指针作为函数参数来传递,依次达到改变变量的值的目的,最后实现一个函数返回两个变量的值 int *X,*X应该被看成一个整体来看,表示一个整形. # ...
- c语言指针,return以及函数返回值
指针作为c语言的精华所在所以会多学习几天来扎实的掌握 void* 这不叫空指针,这叫无确切类型指针.这个指针指向一块内存,却没有告诉程序该用何种方式来解释这片内存.所以这种类型的指针不能直接进行取内容 ...
- c语言 一个函数返回结构体指针,详解C语言结构体中的函数指针
结构体是由一系列具有相同类型或不同类型的数据构成的数据集合.所以,标准C中的结构体是不允许包含成员函数的,当然C++中的结构体对此进行了扩展.那么,我们在C语言的结构体中,只能通过定义函数指针的方式, ...
- open函数返回-1_深入浅出剖析C语言函数指针与回调函数
微信公众号:杨源鑫如果你觉得本文对你有帮助,欢迎留言探讨! 一.C语言回调函数 什么是回调函数? 百度的权威解释如下: 回调函数就是一个通过函数指针调用的函数.如果你把函数的指针(地址)作为参数传递给 ...
- C语言返回指针的函数,指针函数,让一个函数返回一个字符串
C语言函数返回指针的函数(指针函数) 什么是返回指针的函数 一个函数可以返回一个整形值 字符型值 实型值 1.如果一个函数它的返回值是一个地址(是一个指针的话),这个函数是一个返回值是指针即指针函数. ...
- 【C 语言】内存四区原理 ( 栈内存与堆内存对比示例 | 函数返回的堆内存指针 | 函数返回的栈内存指针 )
文章目录 一.函数返回的堆内存指针 二.函数返回的栈内存指针 一.函数返回的堆内存指针 在 main 主函数中 , 调用 get_memory 子函数 , 返回 malloc 初始化的堆内存 , 可以 ...
- C语言函数指针和返回指针值的函数
一.用函数指针变量调用函数 一个函数,在编译的时候 ,系统会给这个函数分配一个入口地址,这个入口地址就称为函数的指针(地址).既然有地址,那么我们可以定义一个指针变量指向该函数,然后,我们就可以通过该 ...
最新文章
- 试玩 go-socks5
- LeetCode 684. Redundant Connection
- hhkb mac设置_我最爱的HHKB
- 【机房重构】关于App.config配置文件
- 谷歌TPU2代有望取代英伟达GPU?测评结果显示…
- 十分钟带你理解Kubernetes核心概念
- 为什么人人都要有产品思维?
- paip.提升用户体验---搜索功能设计
- windows2003 64位+iis6 php环境搭建
- 电脑 Google浏览器 截长屏 无任何辅助软件
- 微信小程序 # 仿写微信通讯录页面(字母侧栏效果)
- 【腾讯笔试题】记腾讯2019年暑假实习移动端开发在线笔试题
- 简单功能强大的jQuery在线图片裁剪插件croppic
- EBS R12中SLA子分类帐与子模块的关联关系
- Mac必备开源鼠标手势软件 MacStroke
- android源码分卷压缩和解压
- 一文带你明白什么是浏览器插件?
- 《工业控制系统信息安全防护指南》实施建议 (上)
- Centos6 yum源设置
- 《推荐系统实战》读书笔记——在隐式反馈系统中如何给商品打分