为什么" const int * p是指向const int的指针"是一个错误的解释,但广泛使用?

时间:2016-02-10 07:20:43

标签: c++ c

许多材料提到

  

const int *p是指向const int的指针。

我真的不这么认为并且没有理解这一点,因为const int *p只是意味着:

通过取消引用p 无法更改对象p指向的值。

这并不意味着:

对象p指向需要为const。

示例:

int a = 5;
const int *p = &a;

此代码完全有效,我们不需要const int a = 5

那为什么这个错误的解释被广泛使用?

3 个答案:

答案 0 :(得分:2)

对于C中的常量对象,实际上没有任何引用/指针,只有对象的只读引用。这很令人困惑,因为只读对象的限定符是const。正如您所观察到的,许多教科书和教程似乎都掩盖了这一事实。

您最接近的是const X *restrict p,它声明p指向无法通过p更改的对象(因为const)并且必须只能通过p访问(因为restrict)。但是,编译器不会强制执行restrict,如果您错误地使用restrict,它可能会给您错误的代码。

所以你回到原点。实际上并没有任何对常量对象的引用"在C中,我们使用const来表示其他内容有点不幸。

答案 1 :(得分:1)

  

此代码完全有效,我们不需要const int a = 5

其实我们需要。在摘录

int a = 5;
const int *p = &a;  

您可以不使用a*p

来修改a
a = 10;  

此处const int *p仅表示程序无法使用表达式*p来更改*p可能指定的任何对象的值。

答案 2 :(得分:0)

当你有const int * a时,意味着存储在地址“a”的值不能改变。

self.addBug = function() {
  var newBug = {
    name: self.bugName(),
    age: 86
  }
  self.bugList.push(newBug);
}