const关键字如何影响指向const变量的指针?

时间:2017-04-14 13:22:41

标签: c pointers const

如果你考虑这个:

int *var1;
const int *var2 = var1;

为什么

*var1 = x; 

编译和

*var2 = x; 

没有?

2 个答案:

答案 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 *非常令人困惑。