const關鍵字在C與C++中修飾變數的區別

阿白發表於2022-11-24

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。

相關文章