This question already has an answer here:
Closed 6 years ago.
How to change the constness of a variable in C++?
(1个答案)
运行以下程序后:
gcc -c volVars.c -o volv

./volv

它编译。
#include<stdio.h>
void main(){
    printf("study of volatile pointers\n");
    const int lConstInt=6;
    printf("\n const int is %d\n",lConstInt);
    volatile const int *lvcint=&lConstInt;
    printf("volatile const int after assignment = %d\n",*lvcint);
    //*lvcint=*lvcint+1; uncommenting this gives compilation error
    int *track = lvcint;
    *track = *track + 1;
    printf("modified the lcoation = %d\n",*track);
}

如果我取消注释lvcint=*lvcint+1;行,它将按预期给出错误但如果我使用非常量的track引用那个指针(lvcint),我可以修改它的内容我在那一行得到警告,但最后我可以修改只读位置的内容gcc中是否有任何错误,或者我缺少什么东西。

最佳答案

粗略地说,const关键字是一个很好的实践,它可以防止一些潜在的错误,也可以触发更好的编译优化。
但它实际上并不像权限位那样保护变量。
有时编译器可能会将常量变量放在二进制文件的只读段中,写入常量变量会触发诸如无效内存访问之类的异常,但不能依赖于此。

09-06 19:54