如何避免在C中改变const的值

use*_*299 1 c

嗨,我是编程世界的初学者,我想知道如何避免更改const变量的值.

#include <stdio.h>
int main()
{
 const int i = 10;
 int * p = &i;
 *p = 20;
 printf("*p = %d\ni = %d\n", *p,i);
 printf("%u\n%u\n",&i, p);
 return 0;
}
Run Code Online (Sandbox Code Playgroud)

在上面的程序中,我只得到警告但没有错误,而我通过指针将值分配给const字段,但是当我打印输出时没有不同:

*p = 20
i = 10
3210723532
3210723532
Run Code Online (Sandbox Code Playgroud)

那么当它不能改变时,获取指向const的指针有什么用呢?

yar*_*nli 7

首先,编译器会因代码而发出警告 int * p = &i;

并且i的值没有改变,因为编译优化了代码,我使用gcc来测试代码:

如果我使用gcc -O0 const.c -o const,O0表示没有编译器优化,结果是

*p = 20
i = 20
1114013412
1114013412
Run Code Online (Sandbox Code Playgroud)

但是当我使用the gcc -O2 const.c -o const,O2表示编译器优化时,结果是

*p = 20
i = 10
1262279764
1262279764
Run Code Online (Sandbox Code Playgroud)

因此,编译器知道类型iconst,并代替i通过10在编译时间本身,因此代码变得

 printf("*p = %d\ni = %d\n", *p,10);
Run Code Online (Sandbox Code Playgroud)

您还可以使用它gcc -S const.c来查看汇编代码.