【函数传参】值、指针和引用的区别

函数传参
(1)传指针和传值的时候,不可以改变指针的指向,但是可以修改指针所指向的数据。传引用时可以修改所引用的值。
(2)传值的时候可以引用值,不可以修改值。
(3)传值和指针时都会生成临时量,传引用不会生成临时量。

(4)传指针引用时,既可以修改指针指向,也可以修改指针所指向的值。

啥话也不说直接上代码:
int &r_val=val;
int *p_ptr=ptr;
void* tmp;
tmp=&r_val;
tmp=&p_val;

g++编译器使用objdump -d 文件名,引用是变量的别称。
tmp = &r_val;
mov    0xfffffffffffffff0(%rbp),%rax//将r_val变量中存的内存地址赋值给rax
mov    %rax,0xfffffffffffffff8(%rbp)//将rax的值赋值给了tmp
tmp = &p_val;
lea    0xffffffffffffffe0(%rbp),%rax//将p_val的内存地址赋值给了rax
mov    %rax,0xfffffffffffffff8(%rbp)//将rax的值赋值给了tmp

我们可以清晰地看出,r_val的汇编调用的是mov,通过计算变量地址读取值,将变量的 赋给寄存器,而lea则是直接将变量的存储地址放入寄存器。引用也会进行内存的分配。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值