里面的常量变量是什么?

What's a const variable inside?

本文关键字:是什么 变量 常量      更新时间:2023-10-16
#include <stdio.h>
int main()
{
  const int a=1;
  printf("a's address is %prn",&a);
  printf("input a's addressrn");
  int *p=NULL;
  //here let p point to a;
  scanf("%p",&p);
  printf("p point to  %prn",p);
  *p=100;
  // I suppose a will be 100, but acturlly a is still 1...
  printf("a's value is %drn",a);
  printf("*p's value is %drn",*p);
  return 0;
}

为什么a仍然1而不是100

但是,如果我声明a为:

int a =1;

它有效!

那么,情况如何呢?

代码中有几个地方调用未定义的行为,这意味着任何事情都可能发生。 a可以是1100"puppy"

首先,你不能做

scanf("%p",&p);
printf("p point to  %prn",p);
*p=100;

因为你可能不拥有那段记忆。即使你这样做了,写信给它也可能是非法的。这里的情况就是这样。

如果您这样做(更改a地址处的值)或使用const_cast,然后尝试修改a,则存在另一个未定义行为的实例。你许下了承诺a const——不要改变它。

结果是 UB,并且发生该行为可能是因为编译器将printf("a's value is %drn",a);优化为一个简单的printf("a's value is %drn",1);,因为它相信您不会修改a(对他来说很丢人)。

当你声明aconst时,编译器可以自由地假设它永远不会改变。 您合成指向它的指针并尝试修改它并不重要,因为(显然)您的编译器已经优化了a的实际加载,当它const时。

const 关键字指定变量的值是常量,并告诉编译器阻止程序员修改它。