c++中数组作为形参时,传递的是值还是地址?

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; 
}

  

 

 

 运行结果:c++中数组作为形参时,传递的是值还是地址?

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; 
}

  输出结果如下:

c++中数组作为形参时,传递的是值还是地址?

 

 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++函数,必须将数组中的数据类型,数组的起始位置和数组中元素数量提交给它;传统方法是将数组名(首地址)作为一个参数,数组长度作为第二个参数。 

 

原文链接: https://www.cnblogs.com/ssfzmfy/p/12520570.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    c++中数组作为形参时,传递的是值还是地址?

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/336029

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月1日 下午10:25
下一篇 2023年3月1日 下午10:25

相关推荐