CH4 数组和指针
数组
指针
1.声明指针的风格
宜采用 string *ps1,*ps2;
尽量不采用 string* ps1,ps2; // ps1是指针 但是ps2是string 容易混淆
2.指针可能的初值
三种状态之一 :
保存一个特定对象的地址;
指向某个对象后面的另一对象;
或者是0值,若是0值,表明它不指向任何对象。 int *pi = 0;
也可使用从C语言集成下来的预处理变量NULL,在头文件cstdlib中定义,其值为0.把指针初始化未NULL等效于初始化未0值。
如果可能的话,除非所指向的对象已经存在,否则不要定义指针,这样可以避免定义一个未初始化的指针。
如果必须分开定义指针和其所指向的对象,则将指针初始化未0。因为编译器可以检测出0值得指针,程序可判断该指针未指向一个对象。
3.指针于const限定符
指向const对象的指针:
理解为 “自以为指向const的指针” 不能通过此指针修改指向对象的值(指向的对象可能不是非const),指针本身指向能够改变。
const double pi = 3.14;
double dval = 3.14;
const double *cptr = π
cptr = &dval;
const指针:
指针本身的值不能改变,但指针所指对象的值能否修改完全取决于该对象的类型
int errNumb = 0;
int *const curErr = &errNumb;
指向const对象的const指针:
const double pi = 3.14159;
const double *const pi_ptr = π
既不能修改pi_ptr所指向对象的值,也不能修改该指针的指向。
4 指针与typedef
typedef string *pstring;
const pstring cstr;
cstr的类型是什么???(极易出错)
很多人认为 真正的类型是:
const string *cstr; 指向string类型的const对象 这是错误的
注意 声明const pstring 时,const 修饰的是pstring的类型,这是一个指针。因此该声明语句应该是把
cstr定义为指向string 类型对象的const指针,等价于
string *const cstr;
理解复杂的const声明 以后待整理