c语言const常量,只能避免直接修改 *** 作,无法避免指针地址间接 *** 作。
#include
void main(){
const int num = 100;
//int a[num];//X
*(int *)&num = 4;
printf("%d",num);//4;
}
c++编译器会将放入数组的const变量直接替换成常量,类似#define。而如果const变量用已经赋值的变量赋值,则编译器会认为赋值的为变量,而不进行优化。
#include
void main(){
const int num = 10;
int a[num];//c++编译器会把num替换成10
cout<<sizeof(a)<<endl;//40
const int n = num;
//int b[n];//X 会报错,c++编译器不敢乱优化
const int num2 = 100;
*(int *)&num2 = 4;
cout<<*(&num2)<<endl;//100 c++编译器强行优化,从寄存器里读内存
cout<<num2<<endl;//100
int b = 10;
const int num3 = b;//变量
*(int *)&num3 = 4;//c++编译器不敢乱优化,num3不替换成变量b
cout<<*(&num2)<<endl;//4
cout<<num2<<endl;//4
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)