关于数组做函数参数的问题集合汇总
- 更新时间:2022-07-06 10:41:39
- 编辑:侯弘毅
参考资料
- 《C/C++语言程序开发参考手册》参考手册 配套资源 / 4.46 MB / 李贺 杨丽 推荐度:
- C++ 语言构造参考手册 / 6.3 MB / 码小辫 推荐度:
- 《深入理解C++11:C++11新特性解析与应用》源代码 配套资源 / 2.65 MB / Michael Wong IBM XL编译器中国开发团队 推荐度:
正文内容
数组做函数参数
首先是数组元素作为函数的实参,这和直接用多个变量作为函数的实参在用法上没有什么差别。
作为例子的代码:
#include<iostream> using namespace std; int main(){ int max(int a,int b); int a[2],m; a[0]=1; a[1]=2; m=max(a[0],a[1]); cout<<m; return 0; } int max(int a,int b ){ if(a<b)a=b; return a; }
然后,是用数组名作为函数参数,数组名其实代表的是数组首个元素的指针。
#include<iostream> using namespace std; int main(){ void alter(int b[]);//b[]括号里面的数值可写可不写,其作用是使编译系统把它当作一维数组来处理 int a[2]; a[0]=1; a[1]=2; alter(a); cout<<a[0]<<"\n"; cout<<a[1]<<"\n"; return 0; } void alter(int b[]){ b[0]=3; b[1]=4; }
3
4
如果我们这样写:
#include<iostream> using namespace std; int main(){ void alter(int b[20]);//b[]括号里面的数值可写可不写,其作用是使编译系统把它当作一维数组来处理 int a[2]; a[0]=1; a[1]=2; alter(a); cout<<sizeof(a); return 0; } void alter(int b[20]){ cout<<sizeof(b)<<endl; }
4
8
为什么我们已经定义了a[2]并且还赋值了,传递到函数以后,大小就只有一个单位呢?
其实,我们定义b[ ]或者b[2]或则b[1]、b[20]、b[100],作用都相当于是 *b。编译器直接忽略了,括号里面的数值。
为了能够更高的说明,数组名作为实参实际上是传递的数组的首指针,可以再看一下这个例子:
#include<iostream> using namespace std; int main(){ void alter(int *b); int a[2]; a[0]=1; a[1]=2; alter(a); cout<<a[0]<<"\n"; cout<<a[1]<<"\n"; return 0; } void alter(int *b){ *b=3; *(b+1)=4; }
================================分割线==========================
接下来,总结一下,数组的引用相关问题
首先是一个普通变量作为数组中一个值的引用的例子:
#include<iostream> using namespace std; int main(){ int a[2]; a[0]=1; a[1]=2; int &t=a[0]; t=5; cout<<a[0]<<"\n"; return 0; }
普通变量作为数组中一个值的引用时,在使用上和int &a=b;并没有什么区别。
我们很自然的想到,普通的变量可以作为数组元素的引用,那么数组元素可否作为其他元素的引用呢?
看下面的代码:
#include<iostream> using namespace std; int main(){ int a[2]; int b=100; &a[0]=b;//这么做是不被允许的 cout<<a[0]<<endl; return 0; }
但是捏,一个数组整体可以作为另一个数组的引用:
#include<iostream> using namespace std; int main(){ int a[2]; a[0]=1; a[1]=2; int (&b)[2]=a; b[0]=3; b[1]=4; cout<<a[0]<<endl; cout<<a[1]<<endl; return 0; }
#include<iostream> using namespace std; int main(){ int a[2]; a[0]=1; a[1]=2; int (&b)[2]=a; b[0]=3; b[1]=4; cout<<a[0]<<endl; cout<<a[1]<<endl; return 0; }
(int (&b)[2])
我们再看数组作为函数的形参的时候应该是怎样的。
#include<iostream> using namespace std; int main(){ void sm(int (&b)[2]); int a[2]; a[0]=1; a[1]=2; sm(a); cout<<a[0]<<endl; cout<<a[1]<<endl; return 0; } void sm(int (&b)[2]){ b[0]=3; b[1]=4; }
3
4
#include<iostream> using namespace std; int main(){ int a[2]; a[0]=1; a[1]=2; int (&b)[2]=a; b[0]=3; b[1]=4; cout<<a[0]<<endl; cout<<a[1]<<endl; return 0; }
C++相关教程
-
C++类的成员初始化列表的相关问题总结
下面小编就为大家带来一篇关于C++类的成员初始化列表的相关问题。小编觉得挺
发布时间:2021-05-17
-
C++实现教师管理系统
这篇文章主要为大家详细介绍了C++实现教师管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
发布时间:2022-04-16
-
C++编译器无法捕捉到的8种错误实例分析
这篇文章主要介绍了C++编译器无法捕捉到的8种错误,是深入学习C++所必须加以掌握的排错技能,需要的朋友可以参考下
发布时间:2021-06-09
-
VC++中进程与多进程管理的方法详解
这篇文章主要介绍了VC++中进程与多进程管理的方法,以实例形式详细分析了进程与多进程管理中所涉及的进程、子进程、进程的互斥运行与进程的结束等概念与具体实现方法,非常具有参考借鉴价值,需要的朋友可以参考下
发布时间:2021-05-28
-
C++中拷贝构造函数的使用
大家好,本篇文章主要讲的是C++中拷贝构造函数的使用,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
发布时间:2022-04-21
-
C++多文件变量解析
大家注意不要在头文件中定义变量,在头文件中声明变量。定义放在对应的源文件中。其他地方只能用extern声明
发布时间:2022-04-14
-
C/C++实现控制台输出不同颜色字体的实例讲解
这篇文章主要介绍了C/C++实现控制台输出不同颜色字体的方法,涉及C++控制台文字属性相关设置操作技巧,需要的朋友可以参考下
发布时间:2021-05-30
-
C++树之遍历二叉树实例详解
这篇文章主要给大家介绍了关于C++树之遍历二叉树的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
发布时间:2022-04-11