C++ const 理解

 转载自:https://www.cnblogs.com/jiabei521/p/3335676.html

如果函数需要传入一个指针,面试官可能会问是否需要为该指针加上const,把const加在指针不同的位置有什么区别;如果写的函数需要传入的参数是一个复杂类型的实例,面试官可能会问传入值参数或者引用参数有什么区别,什么时候需要为传入的引用参数加上const。 const是用来声明一个常量的,当你不想让一个值被改变时就用const,const int max和int const max 是没有区别的,都可以。不涉及到指针const很好理解。一旦涉及到指针,则比较容易出问题。

如果const位于星号的左侧,则const就是用来修饰指针所指向的变量,即指针指向的对象为常量;如果const位于星号的右侧,const就是修饰指针本身,即指针本身是常量

因此,[1]和[2]的情况相同,都是指针所指向的内容为常量(const放在变量声明符的位置无关),这种情况下不允许对内容进行更改操作,如不能*a = 3 ;[3]为指针本身是常量,而指针所指向的内容不是常量,这种情况下不能对指针本身进行更改操作,如a++是错误的,但是*a=3 是允许的;[4]为指针本身和指向的内容均为常量。

实践

int b = 100; 
    const int *a1 = &b; //[1] 与[2]相同 指针指向的对象为常量
    int const *a2 = &b;    //[2] 
    int* const a3 = &b;    //[3]            指针本身是常量
    const int* const a4 = &b;    //[4]    指针本身和指向的内容均为常量
    
    *a1 = 100; //错误,指针指向的对象为常量,不可变更
    *a3 = 100; //正确,指针本身是常量,可以更改指针指向的内容
    (*a3)++; //正确,指针本身是常量,不可更改
    a3++;    //错误,指针本身是常量,不可更改
    *a3++; //错误,同上
    *a4 = 100;    //错误
    a4++;//错误
    *a4++;//错误
    (*a4)++;//错误

猜你喜欢

转载自www.cnblogs.com/lixuwu/p/9452457.html