const声明的变量,无法直接修改,但是可以通过指针间接修改.
const变量a, 修改方式 (1) 定义指针变量*p=(int*)&a ; 或者直接修改 *((int*)(&a))= 20;
方法(2 )mutable,修饰
方法(3 ) const_cast 修饰转换
#include <stdio.h>
void main(void)
{
// int volatile const a = 10;
int const a = 10;
int b = 20;
int *p = (int*)&a;
*p = 20;
printf("&a=%x\n", &a);
printf("&b=%x\n", &b);
printf(" p=%x\n", p);
printf(" a=%d\n", a);
printf("*p=%d\n", *p);
}
但是由于编译器优化问题 结果不一致
我们在这取消优化.得到如下结果 *p与a的值一致.
但是有些情况下不能手动取消编译器的优化.我们可以增加volatile 修饰来 说明不优化.
int const a = 10; 变成int volatile const a = 10; 再次运行
取消了优化.
对于const数组.有两种指针
const int shuzu[5]={3,7,12,15,22};
int *p;
int *shu[5];
p=shuzu; shu[i]=&shuzu[i];
修改*(p+i) *shu[i] 的值可以修改const shuzu[5] 的值