版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ziyuzhao123/article/details/24980347
const修饰的变量应该是只读的变量。在修饰指针类型时,由于其所处的位置的不同,修饰的内容就不同,这就导致了在分析其修饰内容时的一些困难。
比如:分析以下几种情况
const int *p;
int const *p;
int * const p;
const int * const p;
这四种情况分别为
const int *p; //p可变,p指向的对象不可变
int const *p; //p可变,p指向的对象不可变
int * const p; //p不可变,p指向的对象可变
const int * const p; //指针p和p指向的对象都不可变 </span>
你没有觉得特别难以记住这几种情况,这里有比较容易记住的方法:
方法一:
先忽略类型名(编译器解析的时候也是先忽略类型名),我们再看const离哪个最近,离谁最近就修饰谁。
const int *p; //const修饰*p,p是指针,*p是指针所指向的对象,不可变 int const *p; //const修饰*p,p是指针,*p是指针所指向的对象,不可变int * const p; //const修饰p,p不可变,p指向对象的*p可变
const int * const p; //前一个const修饰*p,后一个const修饰p,指针p和p指向的对象*p都不可变
方法二:
如果const位于星号的左侧,则const就是用来修饰指针所指向的变量,即指针的指向为常量,不可变。
如果const位于星号的右侧,const就是修饰指针本身,即指针本身为常量,不可变。