前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C++随记(六)---函数处理数组的一些问题

C++随记(六)---函数处理数组的一些问题

作者头像
TeeyoHuang
发布2017-12-28 14:46:31
5670
发布2017-12-28 14:46:31
举报
文章被收录于专栏:Deep learning进阶路

C++随机(六)---函数处理数组的一些问题

本篇讨论数组做函数形参的情况。

通常,我们按照以往设置形参的习惯,可能会对数组形参做如下的书写:

代码语言:javascript
复制
int example( int arr[ ], int n); //arr是一个数组名,n是这个数组的大小

但仔细想一下,arr作为数组名应该是一个指针才对,而实际上,更标准的函数头应该是这样的:

代码语言:javascript
复制
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++值传递和指针传递的朋友应该马上就明白这个意思了。这个问题在二级或者期末考试中已经被考烂了。

将数组名与指针对应的好处在于:如果我每次都是要像常规变量一样做一个数组的拷贝,内存的开销就比较大了,函数并不是每次都对数组的所有元素进行操作啊,而指针传递的话,相当于是对原数组进行操作,并没有开辟新的内存。

注意:为将数组类型和元素数量告诉数组处理函数,务必通过两个不同的参数来传递它们:

代码语言:javascript
复制
int exam( int arr[ ], int n);//  right!
int exam(int arr[n]);//  wrong!
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-06-09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • C++随机(六)---函数处理数组的一些问题
    • 本篇讨论数组做函数形参的情况。
      • 数组作为形参发生了什么?
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档