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] 的值