This question already has answers here:
Can we change the value of an object defined with const through pointers?
                                
                                    (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