关于const修饰指针

版权声明:本文为博主原创文章,未经博主允许不得转载。 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就是修饰指针本身,即指针本身为常量,不可变。




猜你喜欢

转载自blog.csdn.net/ziyuzhao123/article/details/24980347