C语言数组名做实参与C++容器名做实参对主程序的影响

庭博网校 QQ:14280784  86974558
低价培训计算机高端程序员,欢迎咨询

做了一个实验,发现C++与C在对数组做函数参数时,方式上有很大不同。

C语言将数组名传入函数形参时,是按传地址的方式进行处理的。
函数在处理完数据后,主程序中的数据同时改变;

C++中由容器代替数组,将容器名传入函数形参时,也是按传地址方式进行的,但在处理时跟对将变量名传入函数形参时的处理方法是一样的(即复制方式),但它又不是真正的复制,只是逻辑意义上的复制 。

实验程序如下:
庭博  10:21:07
/*
//功能:验证数组名做参数时,改变函数中的值,主程序中的元素同时改变
#include "iostream"
using namespace std;
int main()
{
void gaibian(int b[10]);
int a[10]={1,2,3,4,5,6,7,8,9,10};
gaibian(a);
for(int i=0;i<10;i++)
cout<<a[i]<<" ";
getchar();
return 0;
}
void gaibian(int b[10])
{
b[5]=100;
}*/

/*
功能:验证容器名做参数时,改变函数中的值,不会对主程序有影响
#include "iostream"
#include "vector"
#include "string"
using namespace std;
int main()
{
void gaibian(vector<int> b);
vector<int> a;
int x;
while(cin>>x)
a.push_back(x);
gaibian(a);
vector<int>::iterator i;
for(i=a.begin();i!=a.end();i++)
{
cout<<*i<<" ";
}
getchar();
return 0;
}
void gaibian(vector<int> b)
{
b[3]=100;
}
*/

/*
功能:容器名做函数实参时,返回值对主程序的影响
*/
#include "iostream"
#include "vector"
#include "string"
using namespace std;
int main()
{
vector<int> gaibian(vector<int> b);
vector<int> a;
int x;
while(cin>>x)
a.push_back(x);
a=gaibian(a);
vector<int>::iterator i;
for(i=a.begin();i!=a.end();i++)
{
cout<<*i<<" ";
}
getchar();
return 0;
}
vector<int> gaibian(vector<int> b)
{
b[3]=100;
return b;
}

你可能感兴趣的:(c,咨询,语言)