c++中数组作为形参时,传递的是值还是地址?
运行如下程序
using namespace std; int a[100]={1,2,3,4,5,6,7,8,9}; void cit( int b[100]){//将a的地址传给b,修改a相当于修改b b[1]=1113;//这里其实修改的是a[1]; cout<<b[1]<<endl; } int main(){ cout<<a[1]<<endl;//输出数组的第一个元素 cout<<a<<endl;//输出数组的地址 //char d='A'; cit(a); cout<<a[1]; return 0; }
运行结果:
1.说明:数组作为形参时,传递的是地址。
在函数中修改数组就相当于修改了原数组。
注意:函数还可以这样写
void cit( int b[]){//将a的地址传给b,修改a相当于修改b b[1]=1113;//这里其实修改的是a[1]; cout<<b[1]<<endl; }
传递时,相等于把数组的首地址传过去了,这样可以不设定数组元素的个数。
如果想传递数组元素的个数,可以这样写数组
void cit( int b[],int n){//将a的地址传给b,修改a相当于修改b b[1]=1113;//这里其实修改的是a[1]; cout<<b[1]<<endl; }
调用 cit(a,8)
2.你猜如果调用cit(a+4,4)会把数组的那个地址传过去呢?
对,第5个元素a[4]的地址
using namespace std; int a[100]={1,2,3,4,5,6,7,8,9}; void cit( int b[],int n){//将a的地址传给b,修改a相当于修改b b[1]=1113;//这里其实修改的是a[5],因为b[0]对应的是a[4]; cout<<b[1]<<endl; } int main(){ cout<<a[1]<<endl;//输出数组的第一个元素 cout<<a<<endl;//输出数组的地址 //char d='A'; cit(a+4,4); cout<<a[1]<<endl; cout<<a[5]<<endl; return 0; }
输出结果如下:
3.如果只想把数组的值传递到函数中,不然函数修改数组的值,应该怎么办呢?
void cit(const int b[],int n)
这样如果函数中不小心修改了数组,则会弹出错误提示
使用const意味着在函数cit中将数组视为只读数据。
下面的程序就会出错误提示
void cit(const int b[],int n){//将a的地址传给b,修改a相当于修改b b[1]=1113;//这里其实修改的是a[5],因为b[0]对应的是a[4]; cout<<b[1]<<endl; }
总结:处理数字的C++函数,必须将数组中的数据类型,数组的起始位置和数组中元素数量提交给它;传统方法是将数组名(首地址)作为一个参数,数组长度作为第二个参数。