C++ primer 读书笔记(3)

本文是C++ Primer读书笔记的第三部分,主要探讨了指针的特性:包括指针作为迭代器的角色,初始化的重要性,void*指针的灵活性,指针与引用的区别,以及如何操作指针的指针和数组。还提到了指向const变量的指针定义方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

指针

1. 指针类似于迭代器,有++操作和*操作。要注意的是,最好不要留下不初始化的指针,这样很容易引起错误,而且很难发现,但是初始化为0的指针是可以被发现的,即不指向任何对象的空指针,所以如果指针暂时没有要指向的对象,最好初始化为0,也可以用cstdlib库里的NULL变量来初始化空指针,NULL不在std namespace里,所以不需要用std::NULL,而是直接用NULL。

2. void* 指针可以指向任何类型的对象:

void *pv=&obj;   //obj可以是任何类型的对象
pv=pd;    //pd可以是任何类型的指针

但是void*类型的指针可以进行的操作很有限:a)与另一个指针比较;b)作为函数的参数或返回值;c)给另一个void*型指针赋值。但是不能对void*指针所指对象进行操作。

3. pointer 和reference的区别主要有两个:一是reference永远是指向某个对象的,它其实只是一个对象的别名,而指针可以为空;二是当对reference赋值时,改变的是它所指对象的值,而对pointer赋值时,改变的是pointer所指的对象,对对象本身没有任何影响:

int ival=1024, ival2=2048;
int *pi=&ival, *pi2=&ival2;
pi=pi2;    //pi指向了pi2,但是ival没有变化
int &ri=ival, &ri2=ival2;
ri=ri2;    //ri依旧指向ival,ival的值变成2048

4. 指针的指针,如int **ppi, 即指向int型指针的指针,要获取该int变量的值,需要两次dereference操作**ppi。

5. 对数组使用下标实际上是在对指针使用下标,只要一个指针指向数组的某个元素,即可对其使用下标:

int *p=&a[2];
int j=p[1];    //j的值等于a[3]
int k=p[-2];   //k的值等于a[0]

6. 指针可以指向数组的最后一个元素的下一个不存在的元素位置,就像iterator一样,用于跟其他指针比较从而判断是否遍历完所有的元素,显然它不能进行*(dereference)操作。

7.指向const变量的指针可以这样定义:

const double *cptr;
const double pi=3.14;
double n=2.7;
cptr=π                         //OK:指向const变量
cptr=&n;                        //OK:也可以指向非const变量
*cptr=2.8;                     //ERROR:无法通过这个指针改变非const变量的值,因为cptr始终认为它指向const变量

const型指针,可以理解为只读型指针,不能改变这个指针的值,定义如下:

int *const curErr=&errNumb;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值