文章引自: https://www.zhihu.com/question/443195492,有改动。
可以有一个小技巧,即:
const默认作用于其左边的东西,如果左边没东西,则作用于其右边的东西。
例如,
const int*
const 要作用于左边的东西,但是左边没东西,所以const修饰int成常量整型,然后*再作用于常量整型。所以这是a pointer to a constant integer(指向一个整型,不可通过该指针改变其指向的内容,但可改变指针本身所指向的地址)
int const *
再看这个,const左边有东西,所以const作用于int,*再作用于int const所以这还是 a pointer to a constant integer(同上)。
int* const
这个const的左边是*,所以const作用于指针(不可改变指向的地址),所以这是a constant pointer to an integer,可以通过指针改变其所指向的内容但只能指向该地址,不可指向别的地址。
const int* const
这里有两个const。左边的const 的左边没东西,右边有int那么此const修饰int。右边的const作用于*使得指针本身变成const(不可改变指向地址),那么这个是a constant pointer to a constant integer,不可改变指针本身所指向的地址也不可通过指针改变其指向的内容。
int const * const
这里也出现了两个const,左边都有东西,那么左边的const作用于int,右边的const作用于*,于是这个还是是a constant pointer to a constant integer。
剩下的不是很常见,该文章不再此处表述,详情请见:
https://www.zhihu.com/question/443195492
补充:
int gorp = 16;
int chips = 12;
const int* p_snack = &gorp;
*p_snack = 20; //不可以,禁止修改p_snack指向的值
p_snack = &chips; //可以,p_snack可以指向另一个变量
int gorp = 16;
int chips = 12;
int* const p_snack = &gorp;
*p_snack = 20; //可以,p_snack可用来修改值
p_snack = &chips; //不可以,禁止修改p_snack指向的变量