今天做了一个题,关于这个问题。
| const int a =1 / int const a=1 | 变量a的值不能改变 |
| const int *a=&b | 指针变量a指向的值不能改变 |
| int * const a=&b | 指针的指向不能改变 |
| int const *const a=&b | 指针指向不能改变,指向的值也不能改变 |
很多人分享了一个经验,就是如果const 位于*的左侧,则const就是用来修饰指针所指向的变量,指针指向常量。如果const位于*的右侧,const修饰就是指针本身,指针本身就是常量,也就是指针指向不能改变。
当我学习这里的是时候,我还是不太明白 const int *a=&b 和 int * const a=&b的区别,指针的指向不能变和指针指向的值不能变是什么意思?我们直接看代码。
int mian()
{
int a=100;
int *b=&a;
*b=3;
return 0;
} 也就是说我们通过*b把a的值进行了改变,这样一来我就明白了了 const int *a=&b 和 int * const a=&b的区别了,指针的指向不能变,指针指向的值不能变就很明显了。其实就是不能通过*a来改变b的值。
现在我们直接看最后一个,第一个const位于*的左侧,又有一个位于*的右侧,因此这个指向不能改变,指向的值也不能变。
再说一下自己对指针的理解,我们知道任何一个变量都有一个地址,比方说 int a=5;
int main()
{
int a=5;
int *b=&a;
return 0;
}这个简单的例子可以比较形象的说明指针。
int main()
{
int a=248;
const int b =21;
const int *c=&a;
int * const d=&a;
int const * const e =&a;
return 0;
}在编译器上看到的结果也是比较明显的。根据const 在*的左侧或者是右侧,在左侧就是修饰的就是指针指向的变量不能改变,在右侧就是指针本身的指向不能改变。
本文详细解析了C/C++中const关键字与指针结合使用的不同情况,并通过实例演示了指针指向不可变与指针自身不可变的区别。

被折叠的 条评论
为什么被折叠?



