1.
定义:string *pstring;//强调pstring是一个指针
而非:string* pstring;//容易被误解为string*是一种类型,当string* str1,str2时,str2可能被认为是一个指针,其实它是一个string对象
2.
将指针初始化为0,编译器可以检测出零值指针,程序可以判断该指针没有指向一个对象
用0的常量表达式或在编译时可获得其值的整型const来给指针赋值
3.
NULL
在cstdlib中定义,编译时自动被0值替换
4.
void*类型
可以保存任何内存的地址,但不允许用void指针操纵所指对象
void*的用法:
可作为参数传递给函数,函数可返回void*
void*可以给void*赋值
可以比较
5.
C++ 语言无法检测指针是否未被初始化,也无法区分有效地址和由指针分配到的存储空间中存放的二进制位形成的地址
6.
指针与引用区别:
引用一旦与一个变量绑定,就不能再引用另一个变量,所以初始化时就要确定指向的变量
修改指针的值是让指针指向另一地址,而修改引用的值是把引用所指向的地址上的数据修改
7.
8.
指向const对象的指针,理解成指向(const int)类型
不能通过pa对a的值进行修改
指向const对象的指针可指向非const变量
非指向const变量的指针不可指向cosnt变量
所以不能保证指向const变量的指针指向的变量不能被修改
把const指针理解为:“自以为指向const的指针”,通常用作函数的形参,确保在函数中不能被修改
10.
const指针(constant pointer),理解成(const pa),即pa被const限制住,其值不可被修改
pa是指向int型对象的const指针
consi指针的值不能被修改,即不能指向其他对象
11.
可以既是const指针,又是指向const对象的指针,既不能修改指针的值,也不能修改指针所指向对象的值
12.
指针和typedef
pstring被定义为指向string类型的指针
const修饰的是pstring类型
const pstring类型不是指向const string类型的指针,是指向string类型的const指针
等价于:string *const cstr;
12.
a,b等价
所以a,b,c等价
13.
这种定义是不合法的,因为ps不是指向const string类型的指针