C++Primer学习札记_指针和const限定符

来源:互联网 发布:js搅拌机型号 编辑:程序博客网 时间:2024/05/01 07:44

一 指向const对象的指针

1.

const double *p;//p是一个指向double类型的const对象的指针
上面这个const限定了p所指向的对象类型,而并非p本身,即p本身并不是const,所以在定义时并不需要初始化


2.把一个const对象的地址赋给一个普通的、非const对象的指针会导致错误

 const  double pi=3.14; double *p=pi;//错误 const double *p1=π//正确 
3.不能使用void* 指针保存const对象的地址,而必须使用const void *类型的指针

const double pi=3.14;const void *p=π//正确void *p1=π//错误
4.允许把非const对象的地址赋给指向const对象的指针

const int *p;int a=10;p=&a;//正确

二 const指针

int a=10;int * const p=&a;

 p是指向int型对象的const指针,和其他const量一样,在定义的时候必须初始化。指针本身是const并没有说明是否能使用该指针修改它所指向的对象的值。


三 指向const对象的const指针

const double pi=3.14;const double * const pi_ptr=π
在上面的语句中,既不能修改pi_ptr所指向的值,也不允许修改该指针的指向


四 指针和typedef 

typedef string * pstring;const pstring cstr;
cstr的类型是什么呢?大多数会认为是 const string  *cstr  但这是错误的,正确的答案应该是string *const cstr 。声明const pstring 时,const修饰的是pstring的类型,这是一个指针,因此,该声明语句应该是把cstr定义为指向string类型对象的const的指针。

0 0
原创粉丝点击