糟心的C++指针类型辨识

来源:互联网 发布:java时间转换成时间戳 编辑:程序博客网 时间:2024/05/14 19:36

本文主要讲的是const指针的辨识。直接上程序:

int _tmain(int argc, _TCHAR* argv[]){int ivar0 = 0;int ivar01 = 1;// 下面两个定义相同const int ivar1 = 1;int const ivar2 = 2;// 下面的两个定义相同,定义指针可修改,指针所指向的值不可修改const int * pivar1;int const * pivar11;pivar1 = &ivar0;pivar1 = &ivar1;*pivar1 = 3;    // 错误,不能修改指针指向的值 // 下面的定义指针不可修改,指针所指向的值可修改int *const pivar2 = &ivar0; //因为指针值不可修改,所以必须初始化*pivar2 = 3;pivar2 = &ivar01; // 错误,不能修改指针本身// 下面的定义指针也不可修改,指针指向的值也不可修改,几乎没有什么用处int const * const ccpiva = &ivar0;ccpiva = &ivar1; // 错误,不能修改指针本身*ccpiva = 4;     // 错误,不能修改指针指向的值 string s = "hello";typedef string *pstring;// 下面的句子相当于 string *const cstr; 所以需要定义时初始化const pstring cstr = &s; return 0;}

总结:

辨识const指针的含义主要在于指针符号*的位置上,在变量前面就说明变量值不可修改,

在const 关键字前面则说明指针值不能修改,两个都有就是两个都不能修改。

const关键字糟心的原因是它可以放在类型前,也可以放在类型后,代表的意思是一样的。

最糟心的应该是typedef 的使用,所以有typedef使用的时候,最好把const放在后面,这样就可以正确理解了。

比如上例中的const pstring cstr ,不要把const放在前面,把const放在后面就对了。string* const cstr。


0 0