引用与指针

原创 2013年09月09日 10:56:35
/****************
 *引用传参
 ****************/
#include <iostream>
using namespace std;
void fun(int &a)
{
	a = 1;
}

int main()
{
	int a;
	fun(a);
	cout<<a;
}

 

;main()函数中:
1000:     int a;
1001:     fun(a);
004015B8   lea         eax,[ebp-4]
004015BB   push        eax
004015BC   call        @ILT+635(fun) (00401280)
004015C1   add         esp,4

;fun(int&)函数中:
996:      a = 1;
00401578   mov         eax,dword ptr [ebp+8]
0040157B   mov         dword ptr [eax],1

/****************
 *指针传参
 ****************/
#include <iostream>
using namespace std;
void fun(int *a)
{
	*a = 1;
}

int main()
{
	int a;
	fun(&a);
	cout<<a<<endl;
	return 0;
}

;fun(int*)函数中:
996:      *a = 1;
00401578   mov         eax,dword ptr [ebp+8]
0040157B   mov         dword ptr [eax],1

;main()函数中:
1001:     int a;
1002:     fun(&a);
004015B8   lea         eax,[ebp-4]
004015BB   push        eax
004015BC   call        @ILT+120(fun) (0040107d)
004015C1   add         esp,4


其中可以看出指针传参和引用传参中的汇编代码极其相似,传的都是地址。

再看下面这个引用的例子:

void fun(int &a)
{
	a = 1;
	*(&a+1) = 2;
}

int main()
{
	int b;
	int a;
	fun(a);
	cout<<"a:"<<a<<"b:"<<b<<endl;
	return 0;
}

汇编:

996:      a = 1;
00401598   mov         eax,dword ptr [ebp+8]      ;这里ebp+8也就是接收的参数的地址,把这个地址的内容(实参a的地址)赋值给eax
0040159B   mov         dword ptr [eax],1               ;eax 里的值是实参a的地址
997:      *(&a+1) = 2;
004015A1   mov         ecx,dword ptr [ebp+8]       ;ecx 里的是实参a的地址
004015A4   mov         dword ptr [ecx+4],2            ;ecx+4是b的地址(因为压栈的时候先push b,然后才 push a, 所以b的地址比a高4)
998:  }

输出结果:a:1b:2

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

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

c的指针和php中的引用

1-php和c中的变量名都会被解析成内存地址,变量名所代表的内存的地址中内容即代表变量的内容,但由于指针的跳转,这个内容往往并不那么明显 2-在c中不同的变量名即代表不同的内存地址,这个是一一对应的...
  • yangfanzn
  • yangfanzn
  • 2015年03月29日 21:19
  • 714

指针与引用的区别,指针与引用的底层实现是否一样?

指针与引用,在More Effective C++ 的条款一有详细讲述, 条款一:指针与引用的区别  指针与引用看上去完全不同(指针用操作符’*’和’->’,引用使用操作符’.’),但是它们...
  • lingfengtengfei
  • lingfengtengfei
  • 2013年10月06日 14:12
  • 2908

C++引用详解及与指针异同点

一、引用详解 引用:就是对某一变量(或对象)取一个别名,对变量的引用 的操作与对变量本身直接操作完全一样。 引用的声明:类型标识符 &引用名=目标变量名;   如下:定义变量a的引用aa,即别名。  ...
  • ljheee
  • ljheee
  • 2016年08月12日 11:22
  • 1156

引用与指针有什么区别?

1. 指针是一个实体,而引用仅是个别名; 2. 引用使用时无需解引用(*),指针需要解引用; 3. 引用只能在定义时被初始化一次,之后不可变;指针可变; 4. 引用没有 const,指针有 co...
  • yangkaikwill
  • yangkaikwill
  • 2015年09月05日 22:13
  • 772

C++ - const常量与指针和引用之间的关系

const常量1、const常量必须在定义的时候初始化,且不能修改。 2、const常量的默认类型为int类型。 3、#define是一个预处理器编译指令。该编译指令告诉预处理器,在程序中来查找并...
  • ko_tin
  • ko_tin
  • 2016年11月15日 23:36
  • 683

深入理解C语言的指针*和引用&

首先是一道关于类型转换的面试题,要求给出float变量强制转换成int型和int &输出的结果。 int test() { float a = 1.0f; cout...
  • nevasun
  • nevasun
  • 2012年03月09日 10:46
  • 2077

JAVA 引用和C语言指针的区别

JAVA中的引用和C中的指针,最好不要混在一起,更不要认为是一回事,只不过他们的作用有些相似,学习者总习惯将它们对比。但在我们写JAVA程序的时候最好忘记C的指针 ,写C程序的时候,也不要老惦记着JA...
  • GUO18735177413
  • GUO18735177413
  • 2015年01月14日 10:04
  • 1555

c++之指针&&引用

引用
  • xxpresent
  • xxpresent
  • 2016年09月24日 16:03
  • 1974

C++中指针和引用的区别(超详细)

指针和引用主要有以下区别: 引用必须被初始化,但是不分配存储空间。指针不声明时初始化,在初始化的时候需要分配存储空间。 引用初始化后不能被改变,指针可以改变所指的对象。 不存在指向空值的...
  • weikangc
  • weikangc
  • 2015年11月10日 17:40
  • 1000
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:引用与指针
举报原因:
原因补充:

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