调⽤函数时的三种参数传递⽅式(传值、传引⽤、传地址)【C++】关于调⽤函数时的三种参数传递⽅式(传值、传引⽤、传地址)的区别
⽬录
1.传值⽅式(形参为普通变量类型):
函数的形参的值是实参的⼀份拷贝,函数体内修改形参时修改的只是“拷贝”⽽已,并不会对实参产⽣影响,即实参本⾝是没有改变的。如果想要在调⽤的函数中修改实参的值,使⽤值传递不能达到修改的⽬的,所以这时只能使⽤传引⽤或传指针的⽅式实现,代码实现如下(可以拷贝代码到编译器验证结果哦):
在下⾯的代码中,对形参中的a,b变量的修改不会影响到主函数中a,b的值(是两个不同作⽤域中的不同变量,a与a(b与b)是两个不同的地址空间。
#include<iostream>
using namespace std;
void exchange(int a, int b)
{
int z;
z = a;
a = b;
b = z;
cout << "a的值为:" << a << "b的值为:" << b << endl;
}
int main()
{
int a = 5;
int b = 8;
/
/调⽤exchange函数前a与b的值
cout << "a的值为:" << a << "b的值为:" << b << endl; //a为5,b为8
exchange(a, b); //a为8,b为5
//调⽤exchange函数后a与b的值
cout << "a的值为:" << a << "b的值为:" << b << endl; //a为5,b为8
return 0;
}
1.传值⽅式结果:
2.传引⽤⽅式(函数形参为引⽤类型) :
在这种传递⽅式中,形参是引⽤类型的变量,其实它就是实参的⼀个别名,在被调⽤的函数中(函数体中),对引⽤变量的所有操作都等价于对实参的操作。这样,整个函数执⾏完毕后,原来的实参的值就将会发⽣改变。
在下⾯代码中,c,d分别为实参a,b的别名,修改c,d的值就相当于修改a,b的值。
#include<iostream>
using namespace std;
void exchange(int &c, int &d)
{
int z;
z = c;
c = d;
d = z;
//c,d分别为实参a,b的别名,修改c,d的值就相当于修改a,b的值
cout << "a的值为:" << c << "b的值为:" << d << endl;
}
int main()
{
int a = 5;
int b = 8;
//调⽤exchange函数前a与b的值
cout << "a的值为:" << a << "b的值为:" << b << endl; //a为5,b为8
exchange(a, b); //a为8,b为5
//调⽤exchange函数后a与b的值
cout << "a的值为:" << a << "b的值为:" << b << endl; //a为8,b为5
return 0;
}
2.传引⽤⽅式结果:
3.传地址⽅式(函数形参是指针):
在这种传递⽅式中,实参是变量的地址,形参是指针类型的变量,在函数体中对指针变量的操作,就是对实参(变量地址)所对应的变量(指向对应地址中内存存放的值)的操作,函数调⽤结束后,原函数中的变量的值将会发⽣改变。被调⽤函数中对形参指针所指向的地址中内容的任何改变都会影响到实参。
在下⾯代码中,指针 e, f 分别接收a,b的地址,修改 e,f 所指向的值就是修改a,b的值。
#include<iostream>
using namespace std;
void exchange(int* e, int* f)指针变量本身有地址吗
{
int z;
z = *e;
*e = *f;
*f = z;
cout << "a的值为:" << *e << "b的值为:" << *f << endl;
//cout<<a<<" "<<b<<endl; 输出a,b指针所指向的地址
cout << e << " " << f << endl;
}
int main()
{
int a = 5;
int b = 8;
//调⽤exchange函数前a与b的值
cout << "a的值为:" << a << "b的值为:" << b << endl; //a为5,b为8
//调⽤exchange函数时,实参位置需要⽤取地址⽅式,
//因为exchange函数形参是指针类型,指针是⼀个对象,存放的是变量的地址
exchange(&a, &b); //a为8,b为5
//调⽤exchange函数后a与b的值
cout << "a的值为:" << a << "b的值为:" << b << endl; //a为8,b为5
return 0;
}
3.传指针⽅式结果:
4. 这⾥也有关到标准库⾥的swap()函数:
#include<iostream>
using namespace std;
int main()
{
int a=5;
int b=8;
cout <<"使⽤swap函数前,a的值为:"<< a <<"b的值为:"<< b << endl; //a为5,b为8 swap(a,b);
cout <<"使⽤swap函数后,a的值为:"<< a <<"b的值为:"<< b << endl; //a为8,b为5 return 0;
}
4.使⽤swap()函数的结果:
⼀般来说,传址⽅式和传引⽤⽅式⽐传值效率⾼。因为传值中,形参进⾏了对实参的拷贝 。
来⾃⼀个学习C++的菜鸟的学习历程,如有错误,望指正(╯﹏╰)。(可以的话,我们可以互相学习。 ̄ω ̄)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论