📜  如何在C中修改const变量?

📅  最后修改于: 2021-05-26 00:56:46             🧑  作者: Mango

每当我们将const限定符与变量名一起使用时,它就会变为只读变量并存储在.rodata段中。任何试图修改该只读变量的尝试都将导致编译错误:“分配只读变量”。

在下面的程序中,尝试使用const限定符声明的只读变量进行修改:

#include
int main()
{
    const int var = 10;
    var = 15;
    printf("var = %d\n", var);
    return 0;
}

输出

prog.c: In function 'main':
prog.c:5:9: error: assignment of read-only variable 'var'

通过指针更改const变量的值

使用const关键字声明的变量将存储在.rodata段中,但是我们仍然可以通过指针访问变量并更改该变量的值。通过将变量的地址分配给非常数指针,我们将常数变量转换为非常数指针。编译器将在类型转换时发出警告,并会丢弃const限定符。变量和指针的编译器优化是不同的。这就是为什么我们能够通过非常量指针更改常量变量的值的原因。
通过非const指针丢弃const限定符

下面的程序说明了这一点:

//Write C code here
#include
#include
int main()
{
    const int var = 10;
  
    int *ptr = &var;
    *ptr = 12;
  
    printf("var = %d\n", var);
  
    return 0;
}

输出

prog.c: In function 'main':
prog.c:6:16: warning: initialization discards 'const' qualifier 
from pointer target type [-Wdiscarded-qualifiers]
     int *ptr = &var;
var = 12

注意:如果我们尝试通过常量指针更改值,则会因为尝试更改只读段而收到错误消息。

想要从精选的最佳视频中学习和练习问题,请查看《基础知识到高级C的C基础课程》。