解引用

今天在c++ Primer 中文版 第五版 第二章 2.3.2看到解引用  下面是我的理解

1     int i = 42;
2     int &r = i;//&紧随类型名出现,因此是声明的一部分,r是一个引用
3     int *p;//*紧随类型名出现,因此是声明的一部分,p是一个指针
4     p = &i;//&出现在表达式中,是一个取地址符
5     *p = i;//*出现在表达式中,*是一个解引用符
6     int &r2 = *p;//*是一个解引用符

引用的本质是指针 给已经存在的变量起一个别名,操作&r访问的是引用的变量

p = &i;//初始化p,p存放i的地址

*p是取出地址中的值 把p所存放地址中的值拿出来  操作*p就是操作i 解引用,就是把该地址的内容取出来。。。

时间: 2024-10-27 02:20:20

解引用的相关文章

关于解引用*和箭头操作符->的重载

这里以一个智能指针类为例,智能指针所指为一个对象. 而事实上,STL迭代器的开发均需要重载这两个操作符,上一篇文章分析STL 迭代器中除了要用到template技巧外,还需要重载技巧 1 #include<iostream> 2 using namespace std; 3 class Screen 4 { 5 6 public: 7 friend ostream& operator<<(ostream&os, Screen &s); 8 int actio

C++14 SFINAE 解引用迭代器

C++14 SFINAE 解引用迭代器 p { margin-bottom: 0.25cm; line-height: 120% } a:link { } 原问题:编写函数f(r),若r为迭代器,则返回f(*r),否则返回r. p { margin-bottom: 0.25cm; line-height: 120% } a:link { } 摘要: p { margin-bottom: 0.25cm; line-height: 120% } a:link { } 问题: 什么是迭代器? 迭代器是

操作符重载之解引用与箭头操作符

箭头操作符与众不同.它可能表现得像二元操作符一样:接受一个对象和一个成员名,对对象解引用以获取成员.不管外表如何,箭头操作符不接受显式形参.这里没有第二个形参,因为 -> 的右操作数不是表达式,相反,是对应着类成员的一个标识符.没有明显可行的途径将一个标识符作为形参传递给函数,相反,由编译器处理获取成员的工作. 理解1 当这样编写时:point->action();由于优先级规则,它实际等价于编写:(point->action)();换句话说,我们想要调用的是对 point->ac

解引用NULL指针

一般导致程序崩溃的最重要原因之一就是试图解引用NULL指针.正如上几篇文章中所说的,智能指针RefCountPtr和ScopedPtr提供了运行时的诊断.但是,并不是所有的指针都是拥有某个对象所有的智能指针.因此为了对试图解引用一个不具有对象所有权的指针的行为进行诊断,引入一种并不删除它所指向的对象的"半智能"指针.例如,如下代码示例: template <typename T> class Ptr { public: explicit Ptr(T* p = NULL) :

顶点数组以及解引用单个数组

法线向量 物体的法线向量定义了他的表面在空间中的方向.具体地说定义了他相对于光源的方向.OpenGL使用法线向量确定了这个物体各个顶点所接受的光照.在定义物体的几何形状时,同时也定义了他的法线向量.可以使用glNormal*()函数,把当前法线向量设置为这个函数所标示的值,以后调用glVertex*()时,就会把当前法线向量分配给所指定的顶点.每个顶点尝尝具有不同的法线,所以需要交替调用这个函数. glBegin(GL_POLYGON); glNormal3fv(n0); glVertex3fv

关于C中指针的引用,解引用与脱去解引用

*,& 在指针操作中的意义 (1)* 大家都知道在写int *p 时,*可以声明一个指针.很少人知道*在C/C++中还有一个名字就是“解引用”.他的意思就是解释引用,说的通俗一点就是,直接去寻找指针所指的地址里面的内容,此内容可以是任何数据类型,当然也可以是指针(这就是双重指针,后面将会讨论).需要注意的是,在变量声明的时候,*不能当做解引用使用,只是表示你声明的变量是一个指针类型. example1: int a=50; int *p=&a;// '&'的作用就是把a变量在内存中

引用 指针 解引用

1.引用 (1)普通引用 符号:&   写在声明时对象的名字之前 概念: 对象的别名,指向同一个对象(地址空间与其保存的变量) 例子: int me = 100; int &alsoMe = me; 当我修改alsoMe的时候,me的值也被修改了,反之亦然,因为两者其实是同一个对象的不同名字. 用处:作为函数的形式参数 (2)const引用 概念: 指向const对象的引用 代码:const int forever = 21; const int &alsoForever =  f

Oracle存储过程详解(引用)+补充(转)

一.过程 (存储过程) 过程是一个能执行某个特定操作的子程序.使用CREATE OR REPLACE创建或者替换保存在数据库中的一个子程序.示例1:声明存储过程,该过程返回dept表行数 DECLARE PROCEDURE getDeptCount AS deptCount INT; BEGIN SELECT COUNT(*) INTO deptCount FROM DEPT; DBMS_OUTPUT.PUT_LINE('DEPT表的共有记录数:'||deptCount); END getDep

前置和后置自增以及解引用重载函数(++、--、*)

#include<iostream> using namespace std; class INT { private: int m_i; public: INT(int i):m_i(i){} // 区分前置和后置自增重载函数的区别是是否有参数,以及参数的个数 // 如果是前置自增,比如++a,因为++符号前面没有变量,于是重载函数也就没有参数 INT& operator++() { ++(this->m_i); return *this; } const INT operat