【发布时间】:2017-04-14 13:22:40
【问题描述】:
如果你考虑这个:
int *var1;
const int *var2 = var1;
为什么
*var1 = x;
编译和
*var2 = x;
没有?
【问题讨论】:
-
这就是 const 的用途...
如果你考虑这个:
int *var1;
const int *var2 = var1;
为什么
*var1 = x;
编译和
*var2 = x;
没有?
【问题讨论】:
你的情况
*var2 = x;
编译失败并显示错误消息(大约),
错误:分配只读位置
*var2*var2 = 10; ^
因为您已将值标记为 const 合格。
要详细说明,您可以阅读类似的声明
const int *var2;
作为,将var2声明为指向const int的指针。所以var2指向的值是常数,不能改变。
如果你希望指针本身是 const 限定的,你需要写类似
int * const var2;
这基本上是将var2 声明为const 指向int 的指针。
因此,稍后任何将 assign 分配给 var2 的尝试都会产生错误,但访问 *var2 会正常工作,因为指针指向的值不再是 const 限定的。
【讨论】:
const int * 描述的是指针 var2,而不是它指向的内存。
在这种情况下 const int * 的用法帮助我理解了:
int
sum( const int *x, const int *y )
{
return *x + *y;
}
int
main(void)
{
int x = 10;
int y = 10;
int sum;
sum = sum &x, *y );
}
通过将 const int * 限定符放在函数论证中,这表示值 x 和 y 在函数内部是不可变的(不可修改)。
但除了这种用法,我发现 const int * 非常令人困惑。
【讨论】: