通过汇编代码看引用和指针的区别
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 相同。
{
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 相同。
相关文章推荐
- C++中通过指针,引用方式做返回值的汇编代码分析
- 详解C++中指针(*)、取地址(&)、解引用(*)与引用(&)的区别 (完整代码)
- 详解C++中指针(*)、取地址(&)、解引用(*)与引用(&)的区别 (完整代码)
- [转] 通过汇编代码理解成员函数指针并不是指针
- 从汇编和高级语言的角度理解传值方式,传值,传引用,传指针的本质机制与区别。白话通俗易懂。
- 汇编角度看指针和引用的区别
- 详解C++中指针(*)、取地址(&)、解引用(*)与引用(&)的区别 (完整代码)
- 详解C++中指针(*)、取地址(&)、解引用(*)与引用(&)的区别 (完整代码)
- 通过反汇编代码解读指针和引用的内在机理
- 汇编分析参数传递中的地址传递与值传递的区别(指针,引用,值传递)
- C++中的引用与指针 汇编代码
- 通过swap代码分析C语言指针在汇编级别的实现
- Linux下C++汇编查看指针和引用区别
- 详解C++中指针(*)、取地址(&)、解引用(*)与引用(&)的区别 (完整代码)
- 引用和指针有什么区别,汇编分析(最真实)
- 通过反汇编代码解读指针和引用的内在机理 .
- 通过汇编代码理解成员函数指针并不是指针
- 详解C++中指针(*)、取地址(&)、解引用(*)与引用(&)的区别 (完整代码)
- 指针和引用的区别
- 指针和引用的区别与相同点