C++ Primer 5th 2.3 复合类型

2.3.1 引用

引用就是一个对象的别名,由于被引用的一定要是一个对象,而引用本身不是对象,所以不能定义引用的引用。

引用一定要在定义时就指定被引用对象。

引用的类型和被引用对象的类型一定要是相同的。

int i = 1024;
int &r = i;
double &r1 = i;	//错误,i为int,而r1为double型,不相同,不对应

2.3.2 指针

空指针

对于空指针,有至少三种定义方法。

int *p = NULL;		//NULL是预编译变量,在预编译时会被替换成0,等价于第二种方法。书中告诫要逐渐减少NULL的使用。
int *p = 0;			//直接赋字面常量0
int *p = nullptr;	//C++ 11 的新标准,以后用这个。

注意,虽然方法2可以直接赋0,但是不能用一个int变量赋值给指针,否则会报错。下面这样是报错误的,亲测。

#include <bits/stdc++.h>
using namespace std;

int main()  {
    int i = 0;
    int *p = nullptr;
    p = i;
    if (p) cout<<"?"<<endl;
    else cout<<"!"<<endl;
    return 0;
}

书中提醒,指针初始化极其重要,如果不知道一个指针要被初始化成什么,就初始化成空指针。

无类型指针

void* pointers

无类型指针可以表示任何对象类型的地址。

嵌套指针

指针用一个*,指针的指针用**,指针的指针的指针用***,以此类推。

对于一个长变量定义的解释,要从右向左看。从右向左,距离越近的越直接影响这个变量。例如。

int *&r = p;

对于左边的定义部分,从右向左,先是引用声明符,说明r是个引用类型;再是指针声明符,说明r的引用类型是指针;再向左,则是int型指针。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值