许多材料提到
const int *p
是指向const int的指针。
我真的不这么认为并且没有理解这一点,因为const int *p
只是意味着:
通过取消引用p 无法更改对象p指向的值。
这并不意味着:
对象p指向需要为const。
示例:
int a = 5;
const int *p = &a;
此代码完全有效,我们不需要const int a = 5
那为什么这个错误的解释被广泛使用?
答案 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);
}