原文链接:https://www.cnblogs.com/Wade-James/p/7965775.html

文章目录

  • @[toc]

我们知道return语句作为被调用函数的结束,返回给调用者函数值。一般来说,是返回一个函数值,像一个int, double,char等类型的数据,当然也可以是他们的指针。但是当我们遇到要返回很多数怎么办呢?通常想到的是以数组的形式返回,下面就让我们来看看:

通常来说有两种方式:
  1.通过返回传入数组指针的方式;
  2.以指针变量作为函数参数,来实现数组的返回。

##一、返回传入数组指针的方式

首先我们来看看这种方法所涉及的知识:(1)指针函数。C语言中允许一个函数返回值是一个指针(地址)基本格式是: 基类型 * 函数名(参数列表)(2)静态变量与局部变量。我们知道C语言程序在运行时,操作系统会给其分配内存空间。这段空间主要分为四个区域,分别是栈取,堆区,数据区,代码区。那么静态变量是存放在数据区,作用范围是全局的,在内存中只存储一份。局部变量通常放在栈中,随着被调用的函数的退出内存空间自动释放。 要接收被调函数返回的指针,那么可以使用一个指针变量。关键是被调函数用什么去返回数组的首地址,正如前面所说,被调函数在执行完之后内存空间就被释放。这里提供两种方法解决这一问题:
###1)通过传入一个空的数组头地址,返回这个变量

//通过返回传入数组的指针的方式
#include"stdio.h"
#include<iostream>
using namespace std;
//定义指针函数
int *copy(int array[], int a[], int n);
int main(){int size = 4;int a2[4];int a1[4] = {3, 5, 7 ,8};int *p;p = copy(a1, a2, size);cout << p[0] << " " << p[1] << " "<<p[2] << " " << p[3] << endl;return 0;
}
int *copy(int array[], int a[], int n)
{for(int i = 0; i < n; i++)a[i] = array[i];return a;
}

代码中我们可以看到通过返回main函数中的a数组的首地址,将其付给指针变量p,从而达到数组传递的作用。

###2) 我们知道静态变量能够在整函数作用有效那么,我们可以定义一个静态的局部变量的数组来达到返回的效果:

//使用静态变量进行返回
#include<stdio.h>
//定义产生数组的函数
int *TestFuction();
int main(){int *p;p = TestFuction();while(*p != 0){printf("%d", &p); p++;} return 0;
}
int *TestFuction(){static int  test[5] = {8, 4, 5, 2, 7};return test;
}

从上面代码可知test数组是一个静态变量,在被调函数执行完成之后不会被释放。
##二、以指针变量作为函数参数,实现数组的返回

指针变量变量需要动态分配内存,通常放在堆区中,该区域内通常又程序员分配或释放。将要处理的数组的首地址以实参的形式传递给函数处理,处理完后的指针适合实参的数组同一块地址,达到返回数组的效果。示例代码如下:

//使用指针变量作为函数参数,来实现数组的返回
#include<iostream>
//定义一个以指针变量作为形参的函数,n作为循环次数
void SumTest(int *p, int n);
using namespace std;
int main2(){int i = 0;int a[5] = {8, 5, 3, 2, 6};SumTest(a, 5);while(i < 5){cout << a[i] << " ";i++;}cout << endl;return 0;
}
void SumTest(int *p, int n){int i = 0;while(i < n){*p = *p + 1;p++;i++;}
}

如代码所示,指针变量作为参数传入函数中,进行数据处理,之后返回的就是处理后的数据。
以上几种方法就能够实现,数组的返回。

C/C++中如何接收return返回来的数组元素相关推荐

  1. Vue获取methods中方法的return返回值

    Vue获取methods中方法的return返回值 1. 遇到的需求 需要调用methods中的一个方法直接使用return返回值: 但直接使用return关键字是undefined,无法直接拿到返回 ...

  2. Java中的方法(形参及实参)return返回类型

    如何定义 Java 中的方法 所谓方法,就是用来解决一类问题的代码的有序组合,是一个功能模块. 一般情况下,定义一个方法的语法是: 其中: 1. 访问修饰符:方法允许被访问的权限范围, 可以是 pub ...

  3. ajax参数中字符串最大长度_6.7 C++数组名作函数参数 | 求3*4矩阵中最大的值

    C++用数组元素作函数实参 C++中实参可以是表达式,而数组元素可以是表达式的组成部分,因此数组元素可以作为函数的实参,与用变量作实参一样,将数组元素的值传送给形参变量. C++也可以用数组名作函数参 ...

  4. Java将图片压缩质量后返回一个byte数组

    项目为了降低存储生成,需要将图片质量压缩大小不变,并且全程要在内存中进行,所以我写了下面的方法.方法中传入参数有两个一个是图片的byte数组,一个是压缩质量(压缩质量在0-1之间).处理完毕后会返回一 ...

  5. php返回json数组元素,php生成返回json对象数组(json支持中文)

    php生成返回json对象数组 注意两种方法生成的对象数组在结构上的区别 $jarr=array( 'total' => 239, 'list' => array( array( 'cod ...

  6. 在Java中使用分隔符(拆分的对立面)连接数组元素的快速简便方法

    本文翻译自:A quick and easy way to join array elements with a separator (the opposite of split) in Java [ ...

  7. matlab在数组中插入,一次快速插入一个Matlab数组元素

    我正试图加速我的代码中的主要瓶颈 . 它是将数组元素插入数组的中间 . 这些元素必须一次插入一个,因为我事先并不知道 . 我无法收集它们并立即将它们全部插入,因为稍后出现的元素(以及它们的插入位置)以 ...

  8. java数组删除数组元素_如何在Java中删除数组元素

    java数组删除数组元素 When we create an array in Java, we specify its data type and size. This is used by JVM ...

  9. java中输出数组元素的方法

    定义一个数组: int [] array = new int {5, 2, 3, 8}; 方法一: for (int i = 0;i < array.length){System.out.pri ...

  10. python中return返回值为函数名_Python函数返回值

    Python函数返回值教程 同时,Python 函数的返回值不需要在函数的签名上体现,只需要在函数体里面直接使用 return 语句返回即可. Python函数不返回值详解 语法 def func_n ...

最新文章

  1. nyoj-Color the necklace(Ploya定理 + 欧拉函数 + 扩展欧几里得(求逆元))
  2. 洛谷 - P2763 试题库问题(最大流+路径打印)
  3. python3中异常处理_python中的五种异常处理机制介绍|python3教程|python入门|python教程...
  4. codeforces 1060 A
  5. MVVM更容易内存泄露吗?
  6. mysql主库从库在同一台服务器_MySQL_MySQL 数据库两台主机同步实战(linux),当一个从服务器连接到主服务 - phpStudy...
  7. pid控制从入门到精通pdf_《PID整定指导》白皮书——PID领域的葵花宝典来袭!
  8. Unity3D项目五:简单打飞碟
  9. C51单片机实验——定时器实验
  10. 导师对计算机学生论文的评语,导师对论文的学术评语
  11. 【Android -- 开源库】Gson 的基本使用
  12. 日期转换成年月日格式java_如何将日,月,年转换为日期格式?
  13. 15、Gantt 修改样式部分
  14. 工作中有可能用到的运维小知识《现查现用》
  15. S2B2b2C模式什么意思?有相关的商城源码吗?
  16. 游戏建模师的现状如何?
  17. matlab装在哪个盘,安装换盘问题
  18. RK3588虚拟摄像头方案?
  19. 救硬盘 分区变成RAW格式 恢复 救回
  20. 亚马逊关联封号的真实案例

热门文章

  1. Hadoop下虚拟机的创建与克隆
  2. 创建者模式 --- 工厂模式
  3. Spring基于XML的IOC细节
  4. python训练营 朋友圈点赞收费吗_微信朋友圈点赞,是不是扣话费?有人给
  5. 通过json发送html代码_Python简单程序爬取天气信息,定时以邮件发送给朋友
  6. sql 查询id 逗号拼接_sql查询列进行STUFF()拼接 单引号 逗号_xml path excel
  7. CSS:input输入框以及button按钮初始细节
  8. Javascript特效:图片切换(类似于电商网站图片查看)的封装实现和闭包实现
  9. 机器学习算法之KNN算法,python实现
  10. leetcode之奇偶链表