- 引用
引用(reference)为对象起了另外一个名字,引用类型引用(refers to)另外一种类型。通过将声明符写成&d的形式来定义引用类型型,其中d是声明的变量名。在初始化变量时,会出现初始值拷贝现象,定义引用则将引用与初始值对象绑定在一起。
-
引用必须初始化(类型必须严格匹配)
-
引用并不是对象,而是给一个已经存在的对象起另一个名字(这个对象必须存在,不可为字面值[10,"10"...])
int &refVal = 0; //error double dval = 3.14; int &refVal2 = dval; //error
- 指针
指针(pointer)是'”指向(point to)“另外一种类型型的复合类型。定义指针类型的方法将声明符写成d的形式,其中d*是变量名。
-
指针本身就是一个对象,允许对指针赋值和拷贝,而且在指针的生命周期内它可以先后指向几个不同的对象。
-
指针无须在定义时赋初值。
使用取地址符(&)可以取得存放某个对象的地址。
- 类型必须严格匹配
double dval = 3.14;
int *p = &dval;
指针的值(即地址)应属下列4种状态之一:
- 指向一个对象。
- 指向紧邻对象所占空间的下一个位置。
- 空指针,意味着指针没有指向任何对象。
- 无效指针,也就是上述情况之外的其他值。
利用指针访问对象
如果指针指向了一个对象,则可以用解引用符(*)来访问该对象。
int ival = 42;
int *p = &ival; //声明指针
*p = 0; //改变对象内容
cout<< *p; //输出0
- 解引用符只适用于确指向了某个对象的有效指针
- 空指针
空指针不指向任何对象,在试图使用一个指针之前可以检查其是否为空。
int *p1 = nullptr; //C++11
int *p2 = 0;
int *p3 = NULL; //cstdlib
- void* 指针
void *是一种特殊的指针类型,可用于存放任意对象的地址。存放的也仅仅就是一个地址。
double obj = 3.14;
void *pv = &obj;
- 不能直接操作相关void *所指向的对象。
- 指向指针的指针
通过*的个数区分指针的级别。
int ival = 1024;
int *pi = &ival; //指向int
int **ppi = π //指向一个int指针
- 指向指针的引用
引用不是对象,指针是对象,因此不存在指向引用的指针,只存在指向指针的引用。
int i = 42;
int *p;
int *&r = p; //对int指针的引用
r = &i; //r是一个int指针,即r指向i
*r = 0; //解引用r得到i
如何理解r的类型是什么?
从右往左阅读,越靠近r的对r有最直接影响(*&r -> & -> r为一个指针)
标签:指向,int,对象,引用,类型,指针 来源: https://www.cnblogs.com/cxl-/p/14489051.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。