关于数组做函数参数的问题集合汇总
首先是数组元素作为函数的实参,这和直接用多个变量作为函数的实参在用法上没有什么差别。
作为例子的代码:
#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;
}
输出结果是:2
然后,是用数组名作为函数参数,数组名其实代表的是数组首个元素的指针。
#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;
}
输出结果是:5
普通变量作为数组中一个值的引用时,在使用上和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;
}
因为数值中的元素是不可以其他变量的引用的额,所以需要用(&b)来说明,这是数组整体引用,然后还必须写清楚数组的大小,即:
(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;
}
上一篇:输入3个字符串,将它们按照字母由大到小排序(示例代码)
栏 目:C语言
下一篇:C++中的对象数组详细解析
本文标题:关于数组做函数参数的问题集合汇总
本文地址:https://www.xiuzhanwang.com/a1/Cyuyan/3954.html
您可能感兴趣的文章
- 01-10求子数组最大和的解决方法详解
- 01-10C语言 解决不用+、-、&#215;、&#247;数字运算符做加法
- 01-10如何寻找数组中的第二大数
- 01-10深入线性时间复杂度求数组中第K大数的方法详解
- 01-10数组中求第K大数的实现方法
- 01-10深入理解数组指针与指针数组的区别
- 01-10c语言字符数组与字符串的使用详解
- 01-10解析sizeof, strlen, 指针以及数组作为函数参数的应用
- 01-10c语言中用字符串数组显示菜单的解决方法
- 01-10探讨C++中数组名与指针的用法比较分析
阅读排行
本栏相关
- 04-02c语言函数调用后清空内存 c语言调用
- 04-02func函数+在C语言 func函数在c语言中
- 04-02c语言的正则匹配函数 c语言正则表达
- 04-02c语言用函数写分段 用c语言表示分段
- 04-02c语言中对数函数的表达式 c语言中对
- 04-02c语言编写函数冒泡排序 c语言冒泡排
- 04-02c语言没有round函数 round c语言
- 04-02c语言分段函数怎么求 用c语言求分段
- 04-02C语言中怎么打出三角函数 c语言中怎
- 04-02c语言调用函数求fibo C语言调用函数求
随机阅读
- 04-02jquery与jsp,用jquery
- 01-10C#中split用法实例总结
- 01-10使用C语言求解扑克牌的顺子及n个骰子
- 01-11ajax实现页面的局部加载
- 01-10SublimeText编译C开发环境设置
- 08-05dedecms(织梦)副栏目数量限制代码修改
- 01-10delphi制作wav文件的方法
- 08-05织梦dedecms什么时候用栏目交叉功能?
- 08-05DEDE织梦data目录下的sessions文件夹有什
- 01-11Mac OSX 打开原生自带读写NTFS功能(图文