c++指针和引用异同
说白了c++中的引用就是指针。。至少底层实现是这样。。
一个例子说明。。一下
#include <stdio.h> int main(int argc , char *argv[]) { int a = 9; int *b = &a; int &c = a; ++c; *b += 2; return 0; } 1: #include <stdio.h> 2: 3: int main(int argc , char *argv[]) 4: { 00401010 push ebp 00401011 mov ebp,esp 00401013 sub esp,4Ch 00401016 push ebx 00401017 push esi 00401018 push edi 00401019 lea edi,[ebp-4Ch] 0040101C mov ecx,13h 00401021 mov eax,0CCCCCCCCh 00401026 rep stos dword ptr [edi] 5: int a = 9; 00401028 mov dword ptr [ebp-4],9 6: int *b = &a; 0040102F lea eax,[ebp-4] 00401032 mov dword ptr [ebp-8],eax 7: int &c = a; 00401035 lea ecx,[ebp-4] 00401038 mov dword ptr [ebp-0Ch],ecx 8: ++c; 0040103B mov edx,dword ptr [ebp-0Ch] 0040103E mov eax,dword ptr [edx] 00401040 add eax,1 00401043 mov ecx,dword ptr [ebp-0Ch] 00401046 mov dword ptr [ecx],eax 9: *b += 2; 00401048 mov edx,dword ptr [ebp-8] 0040104B mov eax,dword ptr [edx] 0040104D add eax,2 00401050 mov ecx,dword ptr [ebp-8] 00401053 mov dword ptr [ecx],eax 10: return 0; 00401055 xor eax,eax 11: } 00401057 pop edi 00401058 pop esi 00401059 pop ebx 0040105A mov esp,ebp 0040105C pop ebp 0040105D ret begin EAX = 00781798 EBX = 7EFDE000 ECX = 00000001 EDX = 00781810 ESI = 00000000 EDI = 00000000 EIP = 00401010 ESP = 0018FF4C EBP = 0018FF88 EFL = 00000212 0018FF25 02 00 00 00 08 00 00 ....... 0018FF2C 02 00 00 00 44 2E 42 ....D.B 0018FF33 00 83 00 00 00 03 00 ....... 0018FF3A 00 00 44 FF 18 00 A8 ..D.... 0018FF41 13 40 00 54 FF 18 00 .@.T... 0018FF48 23 12 40 00 49 11 40 #.@.I.@ end 0018FF25 CC CC CC CC CC CC CC 烫烫烫. 0018FF2C CC CC CC CC CC CC CC 烫烫烫. 0018FF33 CC CC CC CC CC CC CC 烫烫烫. 0018FF3A CC CC 44 FF 18 00 44 烫D...D 0018FF41 FF 18 00 0C 00 00 00 ....... 12 由9---->12 0018FF48 88 FF 18 00 49 11 40 ....I.@ 0018FF4F 00 01 00 00 00 98 17 .......8: ++c; 引用操作
0040103B mov edx,dword ptr [ebp-0Ch]
0040103E mov eax,dword ptr [edx]
00401040 add eax,1
00401043 mov ecx,dword ptr [ebp-0Ch]
00401046 mov dword ptr [ecx],eax
9: *b += 2; 指针操作
00401048 mov edx,dword ptr [ebp-8]
0040104B mov eax,dword ptr [edx]
0040104D add eax,2
00401050 mov ecx,dword ptr [ebp-8]
00401053 mov dword ptr [ecx],eax
不多说,操作方式基本一样(vc6 debug版本)
引用是不是指针一目了然。。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。