这是常见的“赋值时丢弃 const 限定符”错误的来源。但是,我不明白为什么这样做是违法的?
考虑这段代码,
int sum_array(const int *a, int n){
int sum, *i;
sum = 0;
for(i = a; i<a+n; i++)
sum += *i;
return sum;
}
显然我可以使用 i = 0
执行相同的操作并比较 a + i < a+n
;但是,我不明白为什么简单地将一个变量的地址复制到另一个变量是非法的?
通常,const 变量表示不能更改变量的值。例如。 const int x = 7,这里声明x的值不应该从7改变。
但是,有了const指针,创造改变变量的“势”也是非法的。 IE。 i = a 不会改变 a 指向的值,真正“非法”的是 *i = 0,但是,i = a 仍然是非法的,因为它使我们有可能改变 a。
我知道你可以回答我“因为语言是那样创建的”,我只是想知道我是否遗漏了什么。
最佳答案
const
的主要目的是获得编译器的帮助,以确保您不会意外修改给定的对象。它为此使用类型系统。如果愿意,您实际上可以通过编写显式强制转换来规避它;但通常你不想要那个,因为如果你想要那个,那通常意味着你并不真的想要 const
开始。
关于c - 为什么在 C 中创建指向 const 的指针的指针是非法的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54193869/