我们知道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 = ;
int a2[];
int a1[] = {, , ,};
int *p;
p = copy(a1, a2, size);
cout << p[] << " " << p[] << " "<<p[] << " " << p[] << endl;
return ;
}
int *copy(int array[], int a[], int n)
{
for(int i = ; 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 != ){
printf("%d", &p);
p++;
}
return ;
}
int *TestFuction(){
static int test[] = {, , , , };
return test;
}

从上面代码可知test数组是一个静态变量,在被调函数执行完成之后不会被释放,执行结果如下:

二、以指针变量作为函数参数,实现数组的返回

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

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

如代码所示,指针变量作为参数传入函数中,进行数据处理,之后返回的就是处理后的数据。执行结果如下:

以上几种方法就能够实现,数组的返回。

C/C++中如何接收return返回来的数组元素的更多相关文章

  1. 【C++】如何接收函数return返回来的数组元素

    转自 https://www.cnblogs.com/Wade-James/p/7965775.html 我们知道return语句作为被调用函数的结束,返回给调用者函数值.一般来说,是返回一个函数值, ...

  2. js 使用ES6 实现从json中取值并返回新的数组或者字符串

    1.获取的json数据是这样的: data:[ { 'Id': '1', 'Phone': '123456', 'Name': '张三', }, { 'Id': '2', 'Phone': '7894 ...

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

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

  4. 慕课网-Java入门第一季-7-3 Java 中无参带返回值方法的使用

    来源:http://www.imooc.com/code/1579 如果方法不包含参数,但有返回值,我们称为无参带返回值的方法. 例如:下面的代码,定义了一个方法名为 calSum ,无参数,但返回值 ...

  5. Java 中无参带返回值方法的使用

    如果方法不包含参数,但有返回值,我们称为无参带返回值的方法. 例如:下面的代码,定义了一个方法名为 calSum ,无参数,但返回值为 int 类型的方法,执行的操作为计算两数之和,并返回结果 在 c ...

  6. js遍历数组随机返回指定的数组结果

    ////随机生成数组中自定义的个数返回一个字符串数组    function getArrayItems(arr, num) {        //新建一个数组,将传入的数组复制过来,用于运算,而不要 ...

  7. 关于类中的参数类型和return返回值

    基础有些忘了,现在重新巩固一下 先定义一个Person类 class Person(): def __init__(self,name,age,height): self.name=name, sel ...

  8. jquery中ajax用return来返回值无效

    jquery中,ajax返回值,有三种写法,只有其中一种是成功的 /** * async:false,同步调用 * 返回1:2 * 失败 * 分析:ajax内部是一个或多个定义的函数,ajax中ret ...

  9. try--catch--finally中return返回值执行的顺序(区别)

    1.try块中没有抛出异常,try.catch和finally块中都有return语句 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 public static int ...

随机推荐

  1. Locust性能测试框架,从入门到精通

    1. Locust简介 Locust是使用Python语言编写实现的开源性能测试工具,简洁.轻量.高效,并发机制基于gevent协程,可以实现单机模拟生成较高的并发压力. 主要特点如下: 使用普通的P ...

  2. 树莓派.使用Node.js控制GPIO

    树莓派上的40个GPIO是最好玩的东西 它们可以被C,/C++, Python, Java等语言直接控制 现在就来看看怎么用Node.js做到同样的事情 在试验之前, 请先安装好Node.js, 具体 ...

  3. Java基础(00)

    Java发展史 Java之父:詹姆斯.高斯林(James Gosling). SUN(Stanford University Network 斯坦福大学网络公司)产物. 1995年5月23日,java ...

  4. CSDN文章抓取

    在抓取网页的时候只想抓取主要的文本框,例如 csdn 中的主要文本框为下图红色框: 抓取的思想是,利用 bs4 查找所有的 div,用正则筛选出每个 div 里面的中文,找到中文字数最多的 div 就 ...

  5. mysql用户权限设置,远程访问设置、设置固定ip远程访问,设置root用户不能远程访问mysql数据库

    关于mysql的用户管理,笔记   1.创建新用户 通过root用户登录之后创建 >> grant all privileges on *.* to testuser@localhost ...

  6. url 地址处理(截取,参数等)

    function hrefObj() { var localhref = window.location.href; var localarr = localhref.split('?')[1].sp ...

  7. Mybatis通用Mapper

    极其方便的使用Mybatis单表的增删改查 项目地址:http://git.oschina.net/free/Mapper 优点? 不客气的说,使用这个通用Mapper甚至能改变你对Mybatis单表 ...

  8. 径向基网络(RBF network)

    来源:http://blog.csdn.net/zouxy09/article/details/13297881 1.径向基函数 径向基函数(Radical Basis Function,RBF)方法 ...

  9. <script src="xxx.php"></script>

    应热情粉丝的殷切期待,我决定从百忙之中抽出时间来完成这篇博文.(开玩笑啦) 我也是近期才接触到这种引用js的办法.例如,有这样一段js代码 <script src='http://ww.***. ...

  10. github和本地仓库关联

    1.安装git 2.在github上注册账号 3.github上创建repository 4.克隆github上的repository 5.在target directory中右键打开git gui