如果你考虑这个:
int *var1;
const int *var2 = var1;
为什么
*var1 = x;
编译和
*var2 = x;
没有?
答案 0 :(得分:3)
在你的情况下
*var2 = x;
无法编译并显示错误消息(约),
错误:分配只读位置
*var2
*var2 = 10; ^
因为您已将值标记为const
合格。
详细说明,你可以阅读像
这样的陈述 const int *var2;
as,将var2
声明为指向const int
的指针。因此var2
指向的值是常量,不能更改。
如果您希望指针本身是const限定的,则需要编写类似
的内容 int * const var2;
基本上将var2
声明为const
指向int
的指针。
因此,以后任何分配到var2
的尝试都会产生错误,但访问*var2
会正常工作,因为指针指向的值不是const - 已经过资格了。
答案 1 :(得分:0)
在这种情况下使用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 *非常令人困惑。