C++向函数传递数组

数组的存储空间很大,如果能够把它作为参数传递给函数,那么就能发挥很大的作用了。比如本来一个选出最大数的max函数只能在两个数或三个数里面选出一个最大的数字,如果我们把数组传递过去,它就能够在一堆数字中选出最大的数了,这大大提高了程序的效率。当函数中的某个参数是数组时,在参数名后加上一对中括号,比如int a[],表示参数a是一个数组。下面我们就来看这样一个在一堆正数里面找一个最大数的程序:

#include "iostream.h"

int max(int a[],int size);//size是数组的大小

int main()

{

int number[]={2,45,12,6,23,98,13,3};

cout <<max(number,sizeof(number)/sizeof(int)) <<endl;

return 0;

}

int max(int a[],int size)

{

int max=0;

for (int i=0;i<size;i++)

{

if (a[i]>max)

max=a[i];

}

return max;

}

运行结果:

98

我们发现,在函数里使用数组也是比较方便的。但大家有没有考虑过一个问题,我们为什么不在函数里面用sizeof算出数组的大小,而非要在函数外面算好了,再作为参数传递给函数呢?在这里,我们就有必要讲一下数组作为参数传递给函数的原理了。

我们以前说过,参数的传递是将实参的值赋给形参。然而对于数组来说却是一个例外,因为数组的数据太多了,将其一一赋值既麻烦又浪费空间,所以数组作为参数传递给函数的只是数组首元素的地址,函数在需要用到后面元素时再按照这个地址和数组下标去查找。也就是说后面的元素根本没到函数里来,所以在函数里求不出数组的大小也就不足为奇了。

所以,当一个函数的参数是一个数组时,我们必须注意要想办法让这个函数知道数组的大小。

不过,既然数组传递给函数的是数组首元素在内存中地址,而数据又都是存在内存里的,那么在函数中对数组参数的修改会不会影响到实参本身的值呢?让我们来看一段程序,验证一下我们的想法:

#include "iostream.h"

#include "iomanip.h"

void sort(int a[],int size);//将数组中的元素从大到小排列

int main()

{

int num[]={2,3,8,6,4,1,7,9};

const int size=sizeof(num)/sizeof(int);

sort(num,size);

cout <<"排列后的数组元素" <<endl;

for (int i=0;i<size;i++)//输出排列好以后的数组元素

{

cout <<setw(2) <<num[i];

}

cout <<endl;

return 0;

}

void sort(int a[],int size)

{

cout <<"原来的数组元素" <<endl;

for (int i=0;i<size;i++)//输出原来的数组元素

{

cout <<setw(2) <<a[i];

}

cout <<endl;

for (int j=0;j<size;j++)

{

int min=a[j],mink=j;//先假设未排序的首元素是最小的数

for (int k=j;k<size;k++)//找到尚未排序的元素中最小的数

{

if (a[k]<min)

{

min=a[k];

mink=k;

}

}

int temp=a[j];//交换两个元素

a[j]=a[mink];

a[mink]=temp;

}

}

运行结果:

原来的数组元素

2 3 8 6 4 1 7 9

排列后的数组元素

1 2 3 4 6 7 8 9

算法时间:排序(Sort

排序是经常要使用到的一项功能。排序的算法也有多种。程序7.3.2所使用的排序方法称为直接选择排序,即在未排序的元素中选择出最小的一个,与未排序的首元素交换,直到所有的元素都已经排序。(如右上表所示)以后大家还会在数据结构课程中学习到一些更高效的排序算法,如快速排序法,插入排序法等等。

我们交换了sort函数中参数数组a的顺序,却发现回到主函数以后,num数组的元素次序也发生了变化。正是因为我们在函数中将内存中的数据作了操作,所以影响到了实参。

C++向函数传递数组相关推荐

  1. Go 学习笔记(10)— 数组定义、数组声明、数组初始化、访问数组、数组相等、向函数传递数组

    1. 数组定义 数组是具有相同唯一类型的一组已编号且长度固定的数据项序列,这种类型可以是任意的原始类型例如整形.字符串或者自定义类型. 2. 声明数组 Go 语言数组声明需要指定元素类型及元素个数,语 ...

  2. C语言结构体及函数传递数组參数演示样例

    C语言结构体及函数传递数组參数演示样例 注:makeSphere()函数返回Sphere结构体,main函数中.调用makeSphere()函数,传递的第一个參数为数组,传递的数组作为指针. post ...

  3. C++和Java函数传递数组参数比较

    如果我想实现函数参数传递数组的业务需求,在Java中很容易实现,如下所示.因为Java有.length方法,可以获取数组的长度. public class Test {public static vo ...

  4. c python 传参数 数组_python函数传递数组参数吗

    函数是任何一门编程语言都不可缺少的,而且也是非常重要的一部分.Python中函数的参数,可以分为以下几类: 位置参数,有时也称必备参数,指的是必须按照正确的顺序将实际参数传到函数中,换句话说,调用函数 ...

  5. 微信小程序云函数传递数组_微信小程序云开发能力之数据库基础概念

    云开发提供了一个 JSON 数据库,顾名思义,数据库中的每条记录都是一个 JSON 格式的对象.何为JSON 格式的对象? 像这样的{"name":"温仪" , ...

  6. 微信小程序云函数传递数组_微信小程序云开发一周入门

    作为一个程序员,一直想自己做一款程序,无奈工作以来一直做的是数据处理的工作.数据库用的挺溜,但前端就两眼一抹黑了.早在微信小程序刚出来的时候,就关注过,但考虑到前端后端的种种因素,一直没太做深入的了解 ...

  7. python数组做参数_python函数传递数组参数吗

    函数是任何一门编程语言都不可缺少的,而且也是非常重要的一部分.Python中函数的参数,可以分为以下几类: 位置参数,有时也称必备参数,指的是必须按照正确的顺序将实际参数传到函数中,换句话说,调用函数 ...

  8. 1.2 C语言--函数与数组

    函数 函数的定义 返回值类型函数名(类型形参名[,--]){ 函数体 } 除了没有访问修饰符外,基本等同于java的函数. 良好的程序设计风格要求即使没有返回值,也要使用return;作为最后一条语句 ...

  9. python中的记录指针_使用Python向C语言的链接库传递数组、结构体、指针类型的数据...

    使用python向C语言的链接库传递数组.结构体.指针类型的数据 由于最近的项目频繁使用python调用同事的C语言代码,在调用过程中踩了很多坑,一点一点写出来供大家参考,我们仍然是使用ctypes来 ...

最新文章

  1. 玻璃上的编码喜悦(+ 10史诗般的Epigrams)
  2. .git文件夹_Git服务器安装- windows
  3. docker logstash log docker logs to elasticsearch
  4. postfix+postfixadmin+extmail邮件服务器架设过程
  5. vivo的android是什么手机图片,vivo iQOO配置好不好 vivo iQOO手机参数和外观图赏
  6. maven依赖循环引用_shiro+spring boot+mybatis启动循环引用问题解决思路和方案
  7. Visual Studio 远程调试正在运行的进程
  8. dll文件用什么语言编写_为什么Unix不用功能更强大的C++而是用C编写
  9. Java 面向对象(基础) 知识点总结I
  10. 上下文保存 中断_从操作系统(Windows)的角度讨论中断和异常机制
  11. pandas—pd.DataFrame.sample
  12. 乘坐飞机时,有什么事情是机长和机上工作人员不想让乘客知道的?
  13. 领克发布智能电混技术 全新设计语言概念车亮相
  14. 怎么将B站上的视频下载到本地?
  15. Cesium结合kriging.js制作降雨等值面
  16. 用知识图谱解读抑郁症——树洞
  17. 阿里云香港云服务器ECS适合什么场景?
  18. idea修改中文字体
  19. debussy相关资料(持续更新。。。)
  20. 100毫秒过滤一百万字文本的停用词

热门文章

  1. CSS浮动为什么不会遮盖同级元素
  2. 【笔记】LR配置ODBC连接数据库进行参数化(mysql )未完待续
  3. mysql-存储过程 使用游标获取数据集并且操作
  4. struts2的action中获得request response session 对象
  5. 织梦系统中一篇文章存放在数据库中的哪些表中
  6. backbonejs中的集合篇(一)
  7. Linux服务器挂死案例分析
  8. 使用sp_cycle_errorlog 命令清除sqlserver数据库错误日志
  9. 【Linux】预编译,编译,汇编,链接的四过程
  10. 小猿圈学习Python字符串操作--字符串分割函数