C++Primer第2章

引用
  • 引用即别名,并非对象,它只是一个已经存在的对象所起的另外一个名字。
  • 引用赋值,实际上是把值赋给了引用绑定的对象,获取引用的值,实际上是获取了与引用绑定的对象的值。
  • 引用本身不是一个对象,所以不能定义引用的引用。
  • 引用只能绑定在对象上,而不能与字面值或某个表达式的计算结果绑定在一起。
指针
  • 指针定义时,无需赋初值。
  • 因为引用不是对象,没有实际地址,所以不能定义指向引用的指针。
  • 所有只针的类型都要和它所指向的对象严格匹配。
指针值

应属于下列四种状态之一:
1.指向一个对象。
2.指向仅邻对象所占空间的下一个位置。
3.空指针,意味着指针没有指向任何对象。
4.无效指针,也就是上述情况之外的其他值。
试图拷贝或以其他方式访问无效指针的值都将引发错误。

  • 利用指针访问对象

  • 如果指针指向了一个对象,则允许使用解引用符(操作符*)来访问该对象

  • 解引用操作仅适用于那些确实指向了某个对象的有效指针。

  • &和有多重含义
    &和
    紧随类型名出现,因此是声明的一部分
    &出现在表达式中,是一个取地址符
    *出现在表达式中,是一个解引用符

  • 空指针(null pointer)不指向任何对象,在试图使用一个指针之前代码可以首先检查它是否为空
    以下列出几个生成空指针的方法:

int *p1 = nullptr;	//等价于int *p1 = 0;
int *p2 = 0;	//直接将p2初始化为字面常量0
//需要首先#include cstdlib
int *p3 = NULL;	//等价于int *p3 = 0;
  • nullptr可以转换成任意类型的指针

  • void*指针是一种特殊类型的指针类型,可用于存放任意对象的地址。

  • void指针能做的事儿比较有限:拿它和别的指针比较、作为函数的输入或输出,或者赋给另外一个void指针。不能直接操作void*指针所指的对象

  • 指向指针的引用

int *p;	//p是一个int型指针
int *&r = p;	//r是一个对指针p的引用
  • 要理解r的类型到底是什么,最简单的方法是从右向左阅读r的定义。
const限定符
  • const对象一旦创建后其值就不能再改变,所以const对象必须初始化
const int i = get_size();	//正确:运行时初始化
const int j = 42;		//正确:编译时初始化
const int k;		//错误:k是一个未经初始化的常量
//正确:
	int n;
	cin >> n;
	const int k = n;
	cout << k;
  • 默认状况下,const对象仅在文件内有效
    只在一个文件中定义const,而在其他多个文件中声明并使用它。
    解决的办法是,对于const变量不管是声明还是定义都添加extern关键字,这样只需定义一次就可以了:
//file_1.cc定义并初始化一个常量,该常量能被其他文件访问
extern const int bufSize = fcn();
//file_1.h头文件
extern const int bufSize;//与file_1.cc中定义的bufSize是同一个
  • const的引用
    可以把引用绑定到const对象上,就像绑定到其他对象上一样,我们称之为
    对常量的引用
    const
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值