C++中的引用与指针 汇编代码

int main(int argc, char ** argv)
{
。。。。。。。。
int x = 3;
003913DE mov dword ptr [x],3
int &y = x;
003913E5 lea eax,[x]
003913E8 mov dword ptr [y],eax
int *z = &x;
003913EB lea eax,[x]
003913EE mov dword ptr [z],eax

*z = 4;

003913F1 mov eax,dword ptr [z]
003913F4 mov dword ptr [eax],4

y = 5;
003913FA mov eax,dword ptr [y]
003913FD mov dword ptr [eax],5

x = 6;
00391403 mov dword ptr [x],6

cout<<x<<endl;
0039140A mov esi,esp
0039140C mov eax,dword ptr [__imp_std::endl (398298h)]
00391411 push eax
00391412 mov edi,esp
00391414 mov ecx,dword ptr [x]
00391417 push ecx
00391418 mov ecx,dword ptr [__imp_std::cout (398290h)]
0039141E call dword ptr [__imp_std::basic_ostream<char,std::char_traits<char> >::operator<< (398294h)]
00391424 cmp edi,esp
00391426 call @ILT+325(__RTC_CheckEsp) (39114Ah)
0039142B mov ecx,eax
0039142D call dword ptr [__imp_std::basic_ostream<char,std::char_traits<char> >::operator<< (39829Ch)]
00391433 cmp esi,esp
00391435 call @ILT+325(__RTC_CheckEsp) (39114Ah)
return 0;
0039143A xor eax,eax
}

。。。。。。。。。

C++中,引用的本质就是指针

  引用是编译器对指针的封装

  引用由编译器寻址,指针由程序员寻址

  反汇编代码中没有引用的概念

时间: 2024-08-12 12:00:53

C++中的引用与指针 汇编代码的相关文章

[ZZ]C++中,引用和指针的区别

(1) 引用总是指向一个对象,没有所谓的 null reference .所有当有可能指向一个对象也由可能不指向对象则必须使用 指针. 由于C++ 要求 reference 总是指向一个对象所以 reference要求有初值. String & rs = string1; 由于没有所谓的 null reference 所以所以在使用前不需要进行测试其是否有值.,而使用指针则需要测试其的有效性. (2)指针可以被重新赋值而reference则总是指向最初或地的对象. (3)必须使用referenc

Perl5中的引用和指针

一.引用简介 引用就是指针,可以指向变量.数组.哈希表甚至是子程序. 二.使用引用 如果$pointer的值为一个数组的指针,则通过形式@$pointer来访问数组中的元素.形式@$pointer的意义为“取出$pointer中的地址值当作数组使用”.类似的,%$pointer为指向哈希表中第一个元素的引用. 三.使用反斜线(\)操作符 反斜线操作符与C语言中传递地址的操作符&功能类似.一般是用\创建变量又一个新的引用.下面为创建简单变量的引用的例子:    $variavle = 22;   

【C++】C++中的引用与指针

想必大家对C++中的指针都有所了解,但是什么是引用呢?C++11标准引入了“引用”的新功能. 引用 引用(reference):给对象起了另外一个名字,引用类型引用(refers to)另外一种类型,通过将声明符写成&d的形式来定义引用类型,其中d是声明的变量名: int val = 1024; int &d = val; 可以认为变量名就是一个可以操控内存的标签,那么引用就可以理解为另一个标签.新定义的标签和原来的标签都可以访问存放在内存中的数据.例如: #include <ios

Java中的引用和指针

java中内存的分配方式有两种,一种是在堆中分配,一种是在堆栈中分配,所有new出来的对象都是在堆中分配的,函数中参数的传递是在栈中分配的.通常情况下堆的内存可以很大,比如32位操作系统中的虚拟内存都可以被堆所使用(当内存紧张的时候甚至硬盘都可以是堆的存储空间),而堆栈的内存分配是有限的. 这和c++中内存分配差不多.java中有几种基本类型如int,float,double,char,byte等,他们不是对象,除此之外一切都是对象,所有的对象都是在堆上分配的.但好像在C#中这些都有封装好的一些

Java 中的引用和指针

在一些编程场景中,我们常常需要记录下某一个特殊的实例位置(如BST转双向链表题中需要记录最终生成的链表的头节点). 在使用Java编程过程中,需要注意引用的问题. class ListNode { public int val; public ListNode next; public ListNode(int _val) { val = _val; } } public class PointerTestInJava { public static void main(String[] arg

[转载]C++中引用与指针的区别(详细介绍)

本文转载自http://www.cnblogs.com/tracylee/archive/2012/12/04/2801519.html C++中的引用与指针的区别 指向不同类型的指针的区别在于指针类型可以知道编译器解释某个特定地址(指针指向的地址)中的内存内容及大小,而void*指针则只表示一个内存地址,编译器不能通过该指针所指向对象的类型和大小,因此想要通过void*指针操作对象必须进行类型转化.     ★ 相同点: 1. 都是地址的概念: 指针指向一块内存,它的内容是所指内存的地址: 引

C++中的引用

引用就是某个目标变量的别名,对引用的操作与对变量的直接操作效果完全相同. 引用的声明方法:类型标识符 &引用名=目标变量名: 如下:定义引用ra,它是变量a的引用,即别名. int a; int &ra=a; 1)  声明一个引用,必须进行初始化. 2)引用声明完毕后,相当于目标变量有两个名称即该目标原名称和引用名,且不能再把该引用名作为其他变量名的别名. 3)引用本身不是一种数据类型,因此引用本身不占存储单元,系统也不会给引用分配存储单元. 4)不能建立数组的引用.因为数组是一个由若干个

C语言学习笔记 (002) - C++中引用和指针的区别(转载)

下面用通俗易懂的话来概述一下: 指针-对于一个类型T,T*就是指向T的指针类型,也即一个T*类型的变量能够保存一个T对象的地址,而类型T是可以加一些限定词的,如const.volatile等等.见下图,所示指针的含义: 引用-引用是一个对象的别名,主要用于函数参数和返回值类型,符号X&表示X类型的引用.见下图,所示引用的含义: 2.指针和引用的区别 首先,引用不可以为空,但指针可以为空.前面也说过了引用是对象的别名,引用为空--对象都不存在,怎么可能有别名!故定义一个引用的时候,必须初始化.因此

理解ATL中的一些汇编代码(通过Thunk技术来调用类成员函数)

我们知道ATL(活动模板库)是一套很小巧高效的COM开发库,它本身的核心文件其实没几个,COM相关的(主要是atlbase.h, atlcom.h),另外还有一个窗口相关的(atlwin.h), 所以拿来学习应该是很方便的.但是因为ATL的代码充满了模板和宏,内部还夹杂着汇编,所以如果没有比较丰富的C++模板和系统底层的知识,一般人会看得一头雾水. 下面我们主要分析一下ATL中的一些汇编代码. ATL中出现汇编代码主要是2处,一处是通过Thunk技术来调用类成员函数处理消息:还有一处是通过打开_