赞
踩
引用:为对象起一个名字,引用类型引用另外一种类型。
例如: int reference = 100;
int &another = reference;
一般的,初始化变量时,初始值会被拷贝到创建的新对象中。
However,引用时并不是将初始值拷贝给引用。引用将一直和初始值对象绑定在一起。
Note:引用只是已存在对象的另一个名字(它不是一个对象)
对引用赋值,相当于对绑定对象赋值。
Note:引用的初始值必须是对象(不能是一个值)
例:int &reference = 150; is unvalid
指针:是指向另外一种类型的复合类型,与引用类似可以实现对其他对象的间接访问。
Note:指针与引用存在不同点:
1. 指针是一个对象,允许对指针进行赋值和拷贝
2. 生命周期内,一个指针可以指向多个不同的对象
3. 不需要在定义的时候赋初始值(若未初始化,将有一个不确定的值)
功能1:获取对象的地址
例: int a = 1; int *pointer = &a (pointer存放a的地址,是指向a的指针)(&是取地址符)
int a = 1; int *b = &a; int *c = b; (b是指向a的指针) (指针类型需要与它所指向的对象匹配)
4种状态:指向一个对象
指向紧邻对象所占空间的下一个位置
空指针(未指向任何对象)
无效指针:上述之外的其它
功能2:利用指针访问对象
例: int a = 1; int *b = &a; cout << *b; (指针b指向a, 使用解引用符输出a的值“1”)
Note:对指针解引用会得出所指对象,对解引用对象赋值,就是给指针所指对象赋值。(解引用仅适用于指向某个对象的有效指针)
例: *b = 0; cout << *b; (输出0)
多重含义:紧随类型名(& 引用 *指针)
表达式中 (&取地址 *解引用)
空指针:不指向任何一个对象的指针
初始化空指针: int *a = nullptr; int *b = 0; int *c = NULL; (NULL需要包含 #include cstdlib)
在C++11下,最好使用nullptr,尽量避免使用NULL
注意:建议初始化所有指针,尽量在定义了指针之后再定义指向它的指针。如果不清楚指针应该指向何处,就初始化为nullptr或0.
其它指针操作:将指针作为条件判断(非0指针对应的条件值是true)
用相等==;不等!=进行比较(若指针存放的地址相同,则相等)
指向指针的指针:声明符中修饰符的个数并没有限制。指针允许把指针的地址再存放到另外一个指针中
通过*的个数定义指针的级别。**表示指针的指针。***表示指针的指针的指针
指向指针的引用:(没有指向引用的指针,因为引用不是一个对象)
例:int i =42; int *p; int *&r = p; r =&i; *r = 0;
r的类型根据离r最近的符号判断(此处为&),表明R是一个引用。由右向左的下一个符号为*,说明r引用的是一个指针。int符号说明r引用的是一个int类型的指针
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。