函数传参:
(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则是直接将变量的存储地址放入寄存器。引用也会进行内存的分配。