c++引用和指针,不为人知的秘密。

读大学的时候老师总是说,引用和指针有个显然的区别,就是引用是不会分配内存的空间的,而指针是有自己的内存地址的。

例如:int a = 1; int &b = a; int *c = &a; print("%X, %X, %X", &a, &b, &c); 可以通过输出的结果知道:a和b打印的地址相同。


但是:

int main()
{
int a = 1; 
int &b = a; 
int *c = &a;
int *d = &b;
return 0;
}

如果通过反汇编却发现:

.file "hellWord.cpp"
.text
.globl main
.type main, @function
main:
.LFB0:
.cfi_startproc
.cfi_personality 0x3,__gxx_personality_v0
pushq %rbp
.cfi_def_cfa_offset 16
.cfi_offset 6, -16
movq %rsp, %rbp
.cfi_def_cfa_register 6
movl $1, -28(%rbp)
leaq -28(%rbp), %rax
movq %rax, -24(%rbp)
leaq -28(%rbp), %rax
movq %rax, -16(%rbp)
movq -24(%rbp), %rax
movq %rax, -8(%rbp)
movl $0, %eax
leave
.cfi_def_cfa 7, 8
ret
.cfi_endproc
.LFE0:
.size main, .-main
.ident "GCC: (GNU) 4.4.7 20120313 (Red Hat 4.4.7-3)"
.section .note.GNU-stack,"",@progbits


通过汇编代码可以知道:其实引用是分配了地址的,只是编译器给过滤处理了。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值