This question already has an answer here:
Closed 6 years ago.
How to change the constness of a variable in C++?
(1个答案)
运行以下程序后:
它编译。
如果我取消注释
(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