转载自: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)++;//错误
原文:https://www.cnblogs.com/lixuwu/p/9452457.html