C語言中,以const修飾的變數是假常量,用一個指標(不是常指標)指向 const 變數,就能改變其值。
C++中以const修飾的常量就是真常量不能被改變的。示例程式碼如下:
.c檔案
#include<stdio.h>
int main()
{
const int a = 10;
int *p = (int *)&a;
*p = 99;
printf("%d\n",a);
}
/*列印輸出:99*/
深入理解:
在C語言中,printf列印輸出會從記憶體中獲取a的值,此時a的值已經被修改成了99,所以輸出結果為99。
.cpp檔案
#include<iostream>
using namespace std;
int main()
{
const int a = 10;
int *p = (int *)&a;
*p = 99;
cout<<a<<endl;
}
/*列印輸出:10*/
深入理解:
const修飾的常量的值不是不能被改變,而是改變了,C++ 不能取得最新的值,在C++中,const 類似#define,只不過#define在預處理階段進行替換,而const則是在編譯階段進行替換。a在編譯階段就被替換成10了,由於cout輸出a的時候沒有讀取記憶體的過程,所以用指標改變其值也不能獲取最新的值。最後輸出仍為10。