引用与指针区别

原创 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指针或者指向紧邻对象所占空间的下一个指针。但是引用是“绑定到”某个对象,所以一旦定义就不会改变指向的对象。在使用上也就避免了很多问题。

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

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

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

 

 

 

 

 


指针和引用的区别

在c++的学习中,我们经常被应该如何使用指针和引用这个问题所困扰,那么我这里给大家说一下在我的学习过程中对指针和引用的理解,和它们之间的区别,希望各位朋友给出不同的意见并且指出我在学习中的一些错误 ...
  • study__linux
  • study__linux
  • 2016年05月09日 13:05
  • 866

指针和引用的区别与相同点

原文地址:http://blog.csdn.net/will130/article/details/48730725 一、指针和引用的定义和性质区别: (1) 指针:指针是一个变量,只不过...
  • metheir
  • metheir
  • 2017年03月01日 12:10
  • 1268

指针,数组,引用之间的不同点

指针和数组的区别: 数组整数变量加1,其值将增加1,,但将指针变量加1后,增加的量等于它指向的类型的字节数。 指针的值可以修改,而数组名是常量不可以修改。 对数组应用sizeof运算符得到的是数组的长...
  • xuguoli_beyondboy
  • xuguoli_beyondboy
  • 2016年01月27日 13:51
  • 641

引用和指针的区别,数组和指针的区别

一:引用和指针的区别 1:引用并非对象,它只是为一个已存在的对象所起的另外一个名字,必须初始化,而且无法改变它绑定的对象,之后每次使用这个引用都是访问最初绑定的那个对象。 2:指针本身是对象,可以...
  • u013445530
  • u013445530
  • 2015年06月24日 12:08
  • 1020

指针变量和引用变量的区别

关于reference的一些看法
  • forlove_you
  • forlove_you
  • 2016年03月26日 14:01
  • 495

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

1.指针和引用的定义和性质区别: (1)指针:指针是一个变量,只不过这个变量存储的是一个地址,指向内存的一个存储单元;而引用跟原来的变量实质上是同一个东西,只不过是原变量的一个别名而已。如: in...
  • koalacoco
  • koalacoco
  • 2013年12月05日 15:23
  • 396

使用引用还是使用指针

最近碰到一个面试题:何时使用指针,何时使用引用? 首先,标准 C 中是没有引用形参的,只能使用指针形参,应用是c++才加入的,c++中,引用可以看做变量的别名。 那么引用和指针有什么区别呢?主要有...
  • ljthdu
  • ljthdu
  • 2014年07月29日 16:52
  • 1222

传值,传指针和传引用区别和联系

C++写了很多年,有一天,写着写着代码。竟然自己发现对传值,传指针,传引用这个每天都在用的传递方式的区别还不是很清楚。以为自己懂了,其实还理解得还不够深入,基础还需要花时间琢磨。今天参考了很多篇博客和...
  • zx3517288
  • zx3517288
  • 2016年11月27日 12:15
  • 720

函数的参数为引用和指针的区别

C++之所以增加引用类型, 主要是把它作为函数参数,以扩充函数传递数据的功能。 到目前为止我们介绍过函数参数传递的两种情况。 1) 将变量名作为实参和形参 这时传给形参的是变量的值,传递...
  • u014774853
  • u014774853
  • 2016年10月22日 17:37
  • 980

C++小知识之指针和引用的区别

温故而知新,指针和引用的概念,大学时都已熟知,实际用的时候往往又有些疑惑,故深入探究一下。 从概念上讲。指针从本质上讲就是存放变量地址的一个变量,在逻辑上是独立的,它可以被改变,包括其所指向...
  • xdrt81y
  • xdrt81y
  • 2014年01月08日 17:24
  • 9299
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:引用与指针区别
举报原因:
原因补充:

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