您的位置:首页 > 编程语言

通过汇编代码看引用和指针的区别

2006-08-17 15:47 453 查看
int main(int argc, char* argv[])
{
int data = 10;
int &rData = data;
int *pData = &data;

int addr;
addr = (int)&rData;
addr = (int)&pData;

return 0;
}

汇编代码

_data$ = -4
_rData$ = -8
_pData$ = -12
_addr$ = -16
_main PROC NEAR ; COMDAT
; Line 15
push ebp
mov ebp, esp
sub esp, 80 ; 00000050H
push ebx
push esi
push edi
lea edi, DWORD PTR [ebp-80]
mov ecx, 20 ; 00000014H
mov eax, -858993460 ; ccccccccH
rep stosd

; Line 18 int data = 10;
mov DWORD PTR _data$[ebp], 10 ; 0000000aH ;

Line 19 int &rData = data;
lea eax, DWORD PTR _data$[ebp]
mov DWORD PTR _rData$[ebp], eax

//引用变量存储data的地址

; Line 20 int *pData = &data;
lea ecx, DWORD PTR _data$[ebp]
mov DWORD PTR _pData$[ebp], ecx

//指针变量也是存储data的地址

; Line 23 addr = (int)&rData;
mov edx, DWORD PTR _rData$[ebp]
mov DWORD PTR _addr$[ebp], edx

//取引用地址实际取的是data的地址

; Line 24 addr = (int)&pData;
lea eax, DWORD PTR _pData$[ebp]
mov DWORD PTR _addr$[ebp], eax

//取指针的地址取的是指针变量的地址

结论,引用和指针变量虽然使用方法不同,但实际存储的内容相同,即指向变量(data)的地址。不同的是引用随即变为其所指变量的一个“影子”,就连该引用变量的地址 &rData 都和其所指变量的地址 &data 相同。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: