C++随记(六)---函数处理数组的一些问题
来源:互联网 发布:藏宝库源码 编辑:程序博客网 时间:2024/06/04 19:53
作者:teeyohuang
邮箱:teeyohuang@163.com
本文系原创,供交流学习使用,转载请注明出处,谢谢
C++随机(六)---函数处理数组的一些问题
本篇讨论数组做函数形参的情况。
通常,我们按照以往设置形参的习惯,可能会对数组形参做如下的书写:
int example( int arr[ ], int n); //arr是一个数组名,n是这个数组的大小
但仔细想一下,arr作为数组名应该是一个指针才对,而实际上,更标准的函数头应该是这样的:
int example(int *arr, int n);其中用 int *arr 替代了 int arr[ ],
这两个函数头其实都是正确的,在C++中,当且仅当 用于函数头或者函数原型中, int arr[ ]和int *arr 的含义是相同的,都意味着arr是一个int类型的指针。
只不过,用 int arr[ ]其实能够提醒我们,在这里arr不但是一个指针,而且是指向一个 int数组的首元素的指针,说白了就是告诉我们,这里应该是一个数组而不是普通的指针形参。所以在实际编程中,使用数组表示法其实更容易理解程序。
数组作为形参发生了什么?
实际上,数组作为形参的时候,函数并没有把数组的内容传递过来,而是通过另一种方式来对这个数组进行操作,(int arr[ ], int n)将数组的位置(首元素的地址)、数组的类型(此处是int)、数组的大小(即元素个数n)这三个关键信息传递过来了,这样实际有点类似与按指针传递,所以常规变量的形参,实际是对改变量的一个拷贝(值传递),而数组作为形参时,是对原来的数组进行操作(指针传递)。熟悉C++值传递和指针传递的朋友应该马上就明白这个意思了。这个问题在二级或者期末考试中已经被考烂了。
将数组名与指针对应的好处在于:如果我每次都是要像常规变量一样做一个数组的拷贝,内存的开销就比较大了,函数并不是每次都对数组的所有元素进行操作啊,而指针传递的话,相当于是对原数组进行操作,并没有开辟新的内存。
注意:为将数组类型和元素数量告诉数组处理函数,务必通过两个不同的参数来传递它们:
int exam( int arr[ ], int n);// right!int exam(int arr[n]);// wrong!
阅读全文
0 0
- C++随记(六)---函数处理数组的一些问题
- C++随记(一)---字符串数组的输入问题
- 水晶报表遇到的一些问题随记
- C语言函数随记:fflush()函数
- C语言数组的一些问题
- php学习笔记(六)数组及其相关处理函数
- C语言随记(一)—函数
- 字符串处理函数的一些问题
- c语音的一些关键字(六)
- C语言问题随记
- 利用数组处理一些问题!
- 使用数组 处理一些问题
- sys_open的一些随记
- C学习笔记(六)函数、数组与指针
- C与指针 六 一些字符函数
- 【C】一些字符串处理函数
- 关于数组问题的一些总结(c/c++)
- boost库学习随记六:使用同步定时器、异步定时器、bind、成员函数回调处理、多线程的同步处理示例等
- Box
- 第一次面试体验
- 学习笔记---高等数学前置知识---约分、通分
- 存储的瓶颈(6)
- 51nod 1076 2条不相交的路径 [双联通]【图论】
- C++随记(六)---函数处理数组的一些问题
- C语言作业-1-1逆序的三位数
- 针对牛客网刷题关于重复字符串处理的问题
- 存储的瓶颈(5)
- sql and&or用法 实现jsp邮箱或者用户名登录
- Game: snake
- 【C++】学习笔记四十八——this指针
- 贪吃蛇游戏代码
- javaWeb项目中文乱码容易忽略的点