引用与指针区别

原创 2015年11月21日 13:03:35


 只读指针反汇编

引用操作反汇编

#include <iostream>

using namespace std;

void add(int *const nVar)

{

(*nVar) ++;

  //mov         eax,dword ptr [nVar]  

  //mov         ecx,dword ptr [eax]  

  //add         ecx,1  

  //mov         edx,dword ptr [nVar]  

  //mov         dword ptr [edx],ecx 

}

int main()

{

int nVar = 1024;

//mov        dword ptr [nVar],400h  

int *const nvarType = &nVar;

//lea         eax,[nVar]  

    //mov        dword ptr [nvarType],eax

int b = *nvarType;

//mov        eax,dword ptr [nvarType]  

  //mov         ecx,dword ptr [eax]  

  //mov         dword ptr [b],ecx 

add(&nVar);

return 0;

}

#include <iostream>

using namespace std;

 void add(int &nVar)

 {

 nVar++;

  //mov         eax,dword ptr [nVar]  

  //mov         ecx,dword ptr [eax]  

  //add         ecx,1  

  //mov         edx,dword ptr [nVar]  

  //mov         dword ptr [edx],ecx 

 }

int main()

{

int nVar = 1024;

//mov        dword ptr [nVar],400h  

int &nvarType = nVar;

//lea         eax,[nVar]  

    //mov        dword ptr [nvarType],eax

int b = nvarType;

//mov        eax,dword ptr [nvarType]  

   //mov         ecx,dword ptr [eax]  

   //mov         dword ptr [b],ecx 

add(nVar);

return 0;

}

引用类型本质:c++为了简化操作将指针类型进行了封装,只不过为了让c++语言容错机制更强,将指针封装成只读指针,即加上const修饰符修饰,从而产生了引用。

引用与指针区别从内存操作来说:引用类型变量的内存空间对使用者来说是隐藏的,与对象(可对内存读和写)相比只能进行读内存操作,而不能写操作。非常量指针可以进行读写操作,常量指针也可以只进行读操作。

引用与指针区别从初始化来说:为了避免指针指向无效或者非法的对象,引入了nullptr,使得只要指针一创建就要被初始化为nullptr,防止解引用无效的指针,但是引用避免了这个问题,因为引用必须初始化,并且一旦初始化后,引用变量和变量将始终绑定在一起

引用与指针区别从指向对象上来说:指针是“指向”某个对象,言外之意在作用域内指针可以任意改变指向的对象,所以在解引用时,可能访问无效的指针,或者指向nullptr指针或者指向紧邻对象所占空间的下一个指针。但是引用是“绑定到”某个对象,所以一旦定义就不会改变指向的对象。在使用上也就避免了很多问题。

引用与指针区别使用上来说:引用通过编译器自动实现寻址,而指针要手动加 寻址。这也就避免了程序员在使用指针类型时忘记加*。

引用与指针区别其常量类型上说:但是对于指针类型不能指向常量,同时也不能指向与之不同类型但能隐式转化的变量,即使是常量指针即使是能指向常量,但是不能指向与之不同类型但能隐式转化的变量。而常量引用类型可以(注意只能是常量引用),这同时也揭露出引用的本质是一个指针,只不过将常量先保存在一个临时变量中,然后让这个引用指向他而已。

引用与指针区别复合类型声明上说:引用由于不是一个对象不存在引用的引用的复合类型,但是指针是对象,存在多级指针。同时存在指向指针的引用,不存在指向引用的指针。

 

 

 

 

 


相关文章推荐

指针和引用的区别(More Effective c++ )

指针与引用看上去完全不同(指针用操作符“*”和“->”,引用使用操作符“. ” ),但 是它们似乎有相同的功能。指针与引用都是让你间接引用其他对象。你如何决定在什么时候 使用指针,在什么时候使用...

C++指针与引用的区别

  • 2012年03月11日 09:42
  • 72KB
  • 下载

指针和引用的区别

  • 2014年12月07日 15:02
  • 24KB
  • 下载

C++中指针和引用的区别

C++中指针和引用的区别   指针和引用主要有以下区别: 引用必须被初始化,但是不分配存储空间。指针不声明时初始化,在初始化的时候需要分配存储空间。 引用初始化后不能被改变,指...

指针与引用的区别

  • 2015年05月12日 22:26
  • 18KB
  • 下载

指针传递和引用传递的区别

  • 2013年01月22日 16:34
  • 19KB
  • 下载

对象引用(object reference)与对象指针的区别

★ 相同点:     1. 都是地址的概念;     指针指向一块内存,它的内容是所指内存的地址;引用是某块内存的别名。     ★ 区别:     1. 指针是一个实体,而引...
  • Frimish
  • Frimish
  • 2015年07月16日 11:02
  • 322
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:引用与指针区别
举报原因:
原因补充:

(最多只允许输入30个字)