值传递 指针传递 引用传递

参数传递共有三种方式,即值传递、指针传递、引用传递。

值传递

值传递就是在调用函数的时候将实参的值拷贝后赋值给形参,形参改变不会改变实参,各自有各自的空间。且形参为局部变量,函数运行完后会被操作系统释放掉。

#include <iostream>
using std::cout;
using std::endl;

void fun1(int a){
	a = 10;
	cout << "形参的值:" << a << endl;
	cout << "形参的地址:" << &a << endl;
}

int main(){
	int a1 = 20;
	fun(a1);
	cout << "实参的值:" << a1 << endl;
	cour << "实参的地址:"  << &a1 << endl;
	return 0;
}

image

这个过程及参数变化可以看下面这张图(每个色块表示一块内存区域,同色表示同一块内存,下面一行小字是这块内存的地址):
image

指针传递

指针传递也可以理解为一种特殊的值传递,只不过这个值是一个指针变量。所以也会在内存中为形参开辟一块新的区域,用于实参指针对他初始化,此时,实参和形参指针就会指向同一块内存,对形参指针指向的值进行操作就是对实参指针指向的值进行操作。

#include <iostream>
using std::cout;
using std::endl;

void fun1(int* pa) {
    *pa = 10;
    cout << "形参指针指向的值:" << *pa << endl;
    cout << "形参指针指向的地址:" << pa << endl;
    cout << "形参指针的地址:" << &pa << endl;
}

int main() {
    int a1 = 20;
    fun1(&a1);
    cout << "实参的值:" << a1 << endl;
    cout << "实参的地址:" << &a1 << endl;
    return 0;
}

image

内存中的变化如图所示:

image

引用传递

对于引用传递,形参只是实参的别名,并没有为形参重新开辟一块内存,对形参进行操作就是直接在实参上操作,能够改变实参的值。

#include <iostream>
using std::cout;
using std::endl;

void fun2(int& a) {
    a = 10;
    cout << "形参的值:" << a << endl;
    cout << "形参的地址:" << &a << endl;
}
int main() {
    int a1 = 20;
    cout << "a1 = " << a1 << endl;
    fun2(a1);
    cout << "实参的值:" << a1 << endl;
    cout << "实参的地址:" << &a1 << endl;
    return 0;
}

image
内存中的变化如下:
image

形参改变实参也发生了改变,形参实参地址是一样的,对应的是同一块内存区域,因此引用传递相比指针传递可以节省内存空间。

总结:参数传递和函数返回值传递尽量使用引用传递。返回值如果是局部变量的除外

posted @   Happinesspill  阅读(65)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示