首页 > C++编程 > 引用,其实不可以改变指向

引用,其实不可以改变指向

今天跟几位同学讨论了一点小问题,最后谈到指针和引用的区别……最后,谈到引用永远指向初始化它的对象。。。问题就从这里提出。按我的理解,引用是可以改变指向的(说明:这是错误的思维)。

#include <iostream>    
using namespace std;
 
int main(int argc, char *argv[])    
{    
	int a = 10, b = 20;
	int &p = a;
	p = b;
	printf("a = %d b = %d p = %d\n", a, b, p);
 
	return 0;    
}

并不是说,p = b之后,p就指向了b,而是,将b的值赋给了a。我差一点就“成功”的愚弄了群里的同学。其实,p还是指向a的。事实就是这样。

#include <iostream>    
using namespace std;
 
int main(int argc, char *argv[])    
{    
004113C0  push        ebp  
004113C1  mov         ebp,esp 
004113C3  sub         esp,0E4h 
004113C9  push        ebx  
004113CA  push        esi  
004113CB  push        edi  
004113CC  lea         edi,[ebp-0E4h] 
004113D2  mov         ecx,39h 
004113D7  mov         eax,0CCCCCCCCh 
004113DC  rep stos    dword ptr es:[edi] 
	int a = 10, b = 20;
004113DE  mov         dword ptr [a],0Ah 
004113E5  mov         dword ptr [b],14h 
	int &p = a;
004113EC  lea         eax,[a] 
004113EF  mov         dword ptr [p],eax 
	p = b;
004113F2  mov         eax,dword ptr [p] 
004113F5  mov         ecx,dword ptr [b] 
004113F8  mov         dword ptr [eax],ecx 
	printf("a = %d b = %d p = %d\n", a, b, p);
004113FA  mov         esi,esp 
004113FC  mov         eax,dword ptr [p] 
004113FF  mov         ecx,dword ptr [eax] 
00411401  push        ecx  
00411402  mov         edx,dword ptr [b] 
00411405  push        edx  
00411406  mov         eax,dword ptr [a] 
00411409  push        eax  
0041140A  push        offset string "a = %d b = %d p = %d\n" (415868h) 
0041140F  call        dword ptr [__imp__printf (418340h)] 
00411415  add         esp,10h 
00411418  cmp         esi,esp 
0041141A  call        @ILT+325(__RTC_CheckEsp) (41114Ah) 
 
	return 0;    
0041141F  xor         eax,eax 
}

好久没有看这么基础的东西了,难免会有一些错误的想法,能够得到改正,感觉非常荣幸。


觉得文章还不错?点击此处对作者进行打赏!


本文地址: 程序人生 >> 引用,其实不可以改变指向
作者:代码疯子(Wins0n) 本站内容如无声明均属原创,转载请保留作者信息与原文链接,谢谢!


更多



分类: C++编程 标签: , ,
  1. 本文目前尚无任何评论.