引用与指针区别
来源:互联网 发布:apache tomcat modjk 编辑:程序博客网 时间:2024/05/01 04:36
只读指针反汇编
引用操作反汇编
#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指针或者指向紧邻对象所占空间的下一个指针。但是引用是“绑定到”某个对象,所以一旦定义就不会改变指向的对象。在使用上也就避免了很多问题。
引用与指针区别从使用上来说:引用通过编译器自动实现寻址,而指针要手动加 * 寻址。这也就避免了程序员在使用指针类型时忘记加*。
引用与指针区别从其常量类型上说:但是对于指针类型不能指向常量,同时也不能指向与之不同类型但能隐式转化的变量,即使是常量指针即使是能指向常量,但是不能指向与之不同类型但能隐式转化的变量。而常量引用类型可以(注意只能是常量引用),这同时也揭露出引用的本质是一个指针,只不过将常量先保存在一个临时变量中,然后让这个引用指向他而已。
引用与指针区别从复合类型声明上说:引用由于不是一个对象不存在引用的引用的复合类型,但是指针是对象,存在多级指针。同时存在指向指针的引用,不存在指向引用的指针。
- 指针与引用区别
- 引用与指针区别
- 指针与引用区别
- 引用与指针区别
- 指针与引用区别
- 引用与指针区别
- 指针与引用区别
- 引用与指针区别
- 指针与引用的区别
- 指针与引用的区别
- 引用与指针的区别
- 指针与引用的区别
- 指针与引用的区别
- 指针与引用的区别
- 指针与引用的区别
- 指针与引用的区别
- 指针与引用的区别
- 引用与指针的区别
- Win7远程连接常出现的密码错误
- leetcode题库之258
- Leetcode163: Word Ladder
- TPM模拟器安装及使用说明
- ThreadPoolExecuter 原理机制
- 引用与指针区别
- Cocos2dx 中文乱码的解决方法
- 动态规划:求最大子段和
- [原]8小时外实践系列之四——从零开始建立一个个人网站
- 数据结构 — 图 之 广度优先遍历
- [Emacs] 1.2 尝试配置emacs(基础与配色)
- Linux下配置Mysql允许远程访问详解
- 子串和子序列并不是一个意思
- Swift如何实现音乐播放,后台播放及控制。