This question already has answers here:
Can we change the value of an object defined with const through pointers?
(10个回答)
2年前关闭。
最近,我看了一下指针如何与C中的常量一起使用,并且我读到常量上的指针可能导致对其进行修改:
在这里,我定义了一个名为
编辑:这个问题不是this one的重复,因为我在这里问我们如何制作一个实常数,而不是如何通过指针更改常数。
是类型错误;您的编译器应该对此有所抱怨(“分配放弃限定符”或类似的东西)。
为了使一个实常数,您需要使用
现在
不幸的是,该技术仅适用于整数。
常见的替代方法是宏:
在语言水平上,这不是一个常数。相反,预处理器只是在编译过程中用
(10个回答)
2年前关闭。
最近,我看了一下指针如何与C中的常量一起使用,并且我读到常量上的指针可能导致对其进行修改:
#include <stdio.h>
int main (int argc, char ** argv) {
const int x = 1;
int *y;
y = &x;
*y += 1;
printf("x = %d\n", x); // Prints: 2
printf("y = %d\n", *y); // Prints: 2
return 0;
}
在这里,我定义了一个名为
x
的常量,并从中创建了一个指针,以便可以修改其值。这意味着x
不是真正恒定的。有没有办法使它真正恒定?编辑:这个问题不是this one的重复,因为我在这里问我们如何制作一个实常数,而不是如何通过指针更改常数。
最佳答案
首先,const
不定义常量;它定义了只读变量。
线
y = &x;
是类型错误;您的编译器应该对此有所抱怨(“分配放弃限定符”或类似的东西)。
*y += 1
尝试修改只读对象。不仅不能保证它能正常工作,而且还具有不确定的行为(即可能发生任何事情)。为了使一个实常数,您需要使用
enum
:enum { x = 1 };
现在
&x
是一个错误,因为常量不存在于内存中并且没有地址。不幸的是,该技术仅适用于整数。
常见的替代方法是宏:
#define X 1
在语言水平上,这不是一个常数。相反,预处理器只是在编译过程中用
X
替换任何出现的1
。关于c - 如何在C中使“实”常数? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49719175/
10-09 15:51