所有 C 代码:
为什么允许这样做:
int main()
{
const int *i;
int j=2;
i=&j;
}
但不是这个:
int main()
{
const int i;
int j=2;
i=j;
}
有没有办法声明一个局部常量变量,然后在范围内的其他地方定义它?第一种使用指针的情况是不可靠的,因为我可以多次定义它而逃脱,这首先违背了常量关键字的目的。
最佳答案
从语义上讲,第一个示例的意思是“指向 const int 的指针”而不是“指向 int 的 const 指针”。
因此,当您将 i 设置为指向 j(一个非常量整数)时。 i 现在指向一个 const,因此你不能通过指针 i 改变 j 的值,例如:
int main()
{
const int *i;
int j=2;
i=&j;
*i = 4;
}
不会编译,给出错误“只读位置‘*i’的赋值”。因此指针限制了您对所指向的值的访问。但指针本身仍然可以更改。
C 作为一种语言,并没有真正提供太多保护,您通常可以丢弃 const 并为变量分配一个新值,例如:
#include <stdio.h>
void assign(int *a) {
*a=5;
}
int main()
{
int const i=1;
int j=2;
assign((int *) &i);
printf("i: %d\n",i);
}
但我不确定我是否会推荐它。虽然这在某些版本的 gcc 中有效,但这种行为在 C 标准中可能未定义。
关于C 中的常量 : declaration separate from definition,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30688064/