转载:(C/C++函数返回多个值)
当我们在处理一个数组的时候常常会碰到这样的问题:输入一个数组,和数组的一个元素,返回该元素所在行数和列数。这样就需要返回多组两个值,且组数不定。上述类型的函数在c语言程序里面存在两个问题。第一,函数只能返回一个值(指针);第二,若以指针返回值,则不确定指针所指的内存大小。以下先分别解决这两个问题,之后综合考虑。
1返回多个值的函数
1.1采用指针参量记录值
不用函数的返回值,直接用指针来处理。在函数的输入项里加入一个指针,用来保存记录多个值。如下所示,a[N][M]为要处理的数组,s为要找的数,指针c则记录值,并传回原函数。
1 int find_num1_1(int a[N][M],int s,int *c) 2 { 3 int i,j; 4 for(i=0;i<N;i++) 5 for(j=0;j<M;j++) 6 if(a[i][j]==s) 7 { 8 c[0]=i;c[1]=j; 9 return 1; 10 } 11 return 0; 12 }
1.2采用函数返回指针
可以直接定义一个返回指针的函数,将指针返回,再经指针取到所需要的值。如下,函数返回一个指针,用指针记录需要输出的结果。
1 int *find_num1_2(int a[N][M],int s) 2 { 3 int *co; 4 int i,j; 5 6 co=(int *)malloc(2*sizeof(int)); 7 for(i=0;i<N;i++) 8 for(j=0;j<M;j++) 9 if(a[i][j]==s) 10 { 11 co[0]=i;co[1]=j; 12 return co; 13 } 14 free(co); 15 co=NULL; 16 return co; 17 }
但这里有一个问题,若找到了s在a中对应的行和列,前面用mallloc所分配的内存区域就不能得到释放,从而浪费内存。
2返回动态指针
因为数组中的值相同的数目不确定性,用大的数组太浪费内存,所以要采用动态内存的办法。如上相同对应也有两种传回的办法,但这里我只是提到采用指针参量记录值的办法来返回动态指针。这里我们需要注意的是,在为一个指针分配内存的时候,只能进行一次分配(这句话我不太确定,希望有知道的看客们能提供一些指导)。于此,我们必须首先要定义一个函数来返回相同项目的个数,之后才能对其分配内存。函数如下:
1 int find_num2(int a[N][M],int s, int (*c)[2]) 2 { 3 int i,j,n=0; 4 for(i=0;i<N;i++) 5 for(j=0;j<M;j++) 6 if(a[i][j]==s) 7 { 8 c[n][0]=i,c[n][1]=j; 9 n++; 10 } 11 return n; 12 } 13 int same_num(int a[N][N],int s) 14 { 15 int i,j,n=0; 16 for(i=0;i<N;i++) 17 for(j=0;j<M;j++) 18 if(a[i][j]==s) 19 ++n; 20 return n; 21 }
内存分配在上级函数中,这样就比较容易释放内存。
1 n=same_num(a,s); 2 cc=(int (*)[2])malloc(n*2*sizeof(int)); 3 if(find_num2(a,s,cc)!=0) 4 while(n--) 5 printf("number is in the (%d,%d)\n",cc[n][0],cc[n][1]); 6 else 7 printf("can't find it\n"); 8 free(cc);
这样就能完美地实现要求,且输出的数据可用于其他函数处理。
转载于:https://www.cnblogs.com/infinitelearning/p/10034418.html
转载:(C/C++函数返回多个值)相关推荐
- Android JNI编程(三)——C语言指针的初步认识、指针变量、互换两个数、函数返回多个值...
版权声明:本文出自阿钟的博客,转载请注明出处:http://blog.csdn.net/a_zhon/. 目录(?)[+] 一.什么是指针? 简单来说: 指针就是内存地址 内存地址就是指针. ...
- python学习笔记-day6-函数的延续【汉字转拼音模块,函数返回多个值,匿名函数,列表生成式,generator生成器,三元运算符】...
继续来说函数的后续知识点,主要是函数返回多个值,匿名函数,三元运算符,算是比较小的知识点. 一.汉字转拼音模的使用 1.安装模块 #install xpinyin 2.如果使用 结果: 二.函数返回多 ...
- c++中函数放在等号右边_如何从C或C++中的函数返回多个值?
新程序员通常在寻找从函数返回多个值的方法.不幸的是,C和C++不允许直接这样做.但是幸运的是,通过一些巧妙的编程,我们可以轻松实现这一目标. 下面是从C函数中返回多个值的方法: 通过使用指针. 通过使 ...
- Python学习之函数返回多个值
Python学习之函数返回多个值 问题的引出 Python中,一个函数能不能一次返回多个值? 在C语言中,函数最多返回一个值,如果要返回多个值,可以把这些值封装在一个结构体中.注意,C语言不允许函数返 ...
- python函数返回多个值_python函数返回多个值的示例方法
python可以返回多个值,确实挺方便 函数里的return只能返回一个值,但是返回类型是没是限制的 因此,我们可以"返回一个 tuple类型,来间接达到返回多个值". 例子是我在 ...
- Java中如何实现一个函数返回多个值
由于java中没有指针,不能像C++一样通过指针的方式实现一个函数返回多个值,因此在java中必须采用变通的方式解决,常用的方式有以下几种: 1.封装一个实体类,将要返回的值封装进去: 2.通过map ...
- C语言通过指针间接的实现函数返回多个值
C语言通过指针间接的实现函数返回多个值 本例题中通过把指针作为函数参数来传递,依次达到改变变量的值的目的,最后实现一个函数返回两个变量的值 int *X,*X应该被看成一个整体来看,表示一个整形. # ...
- 指针实现函数返回多个值
通常情况下,函数如果有返回值,那么该函数的返回值类型必须和函数的类型一致,并且一个函数只能有一个返回值.下面我们通过指针来间接实现函数返回多个值 void caculator(int a,int b, ...
- matlab函数结果,matlab 函数返回多个值--样例
matlab 函数返回多个值--样例 发布时间:2018-02-14 19:52, 浏览次数:2062 , 标签: matlab 目录 一.matlab的函数文件返回多个值写法 二.简单的例子 三. ...
最新文章
- syslog打印不带等级_socket发送syslog不能获得级别
- 《算法导论》中parallel for 的时间复杂度
- python【蓝桥杯vip练习题库】ADV-281特等奖学金
- 【设备】WIN10怎么用佳能LIDE120扫描仪?
- 机器学习:线性回归I 最小二乘法
- GitHub 发布重磅更新:你电脑上的 IDE 可以删了?!
- 高级数据结构---并查集
- HDU 4701 Game
- 邮件误删不用怕,试试这个方法帮你找回来
- DevExpress WPF v19.1新版亮点:PDF Viewer等控件新功能
- Android JNI的调用过程
- MySQL-Front设置中文
- Darklabel多目标跟踪标注工具
- sqlmap注入之tamper绕过WAF防火墙过滤
- 世界上最早的手动计算机,世界上第一台电子计算机诞生于多少年,名字叫做什么...
- 非形式逻辑(04)因果关系和推理
- 快速入门Sqlite数据库应用
- 中电资讯-银保监会提示防范“元宇宙”风险
- VueJs中的reactive函数
- Linux—教你两个方法轻松找回root密码
热门文章
- “sql2005管道的另一端上无任何进程”及附带一系列问题完整解决方法
- 【CyberSecurityLearning 24】kali中间人攻击
- 在代码段中安排自己定义的数据
- 合并排序的非递归实现(自底向上设计)
- 白话详细解读(七)----- CBAM:Convolutional Block Attention Module
- Altium Designer -- PCB 叠层设计
- 计算机电子与网络技术,电子信息工程与计算机网络技术
- 高cpu_再一次生产 CPU 高负载排查实践
- 用隐马尔可夫模型(HMM)做命名实体识别——NER系列(二)
- [原创]基于frida的脱壳工具