[001]const和指针

很经典的:

const int* p;

int* const p;

前者表示指针指向的值是const,指向的值不可变,但是指针本身是可变的;后者表示改指针是const,指针不可变,但是指向的值是可变的。

写个代码就是:

const int* p = &a;
*p = 123;                // Error
p = &b;                    //OK

int* const p = &a;
*p = 123;                // OK
p = &b;                    // Error

------------------------------------------------------------------------------------------------

看了上面都会觉得const和指针的关系了解的差不多了,但是,其实并不是这样的。

如果有以下的定义,那么s是什么类型呢?

typedef string *pString;
const pString s;

很多人都会回答成:const pString是一种指针,指向string类型的const对象,其实错了。

声明const pString的时候,const修饰的是pString类型,这是一个指针,因此,该声明语句是把s定义为指向string类型对象的const指针,即

string* const s;

 那么我们再变态一点,弄个下面的定义呢?

pString const s1;

这个时候的s1是什么呢?

其实这个时候,完全可以把pString看成是一个类型,就像是下面的代码,根本没有什么区别!

const int a;
int const a;

所以,s1的类型和s是一样的。

原文地址:https://www.cnblogs.com/hustcser/p/3620909.html