首先宣告一下:const的不同是由於編譯器對const的處理方法不同造成的。因此,我們所接下來所說的差異是分別針對c89和c++99版本的編譯器。
1、 c語言中的const
#include
void main()
; 不能用a作為陣列下標
//a = 20; //不能進行直接修改
printf("修改前a=%d\n", a);
int *p = &a;
*p = 20;
printf("修改後a=%d\n",a);可以看出,在c語言中,const 修飾的變數是常變數,它的性質還是屬於變數,只不過是具有常性的變數,
也就是說:(1)它不能通過直接作為左值的方式來進行修改;
(2)在編譯過程中,與變數一樣的方式處理;
(3)它還是屬於變數,因此不能作為陣列的下標;
(4)雖然不能直接直接修改a的值,但是可以通過獲取a的位址來間接修改。
2、 c++中的const
#includeusing namespace std;int main();//a = 20;cout << "修改前a=" << a << endl;int *p = (int*)&a;*p = 20;cout << "修改後a=" << a << endl;可以看出,在c++中,const 修飾的變數是常量
,它也就具有常量的性質。那麼
:(1)
它不能通過直接作為左值的方式來進行修改;
(2)它可以作為陣列下標使用;
(3)它必須被初始化;
(4)在編譯過程中,所有使用a的地方會被替代成10;(c++編譯器對const常量的處理當碰到常量宣告時,在符號表中放入常量;編譯過程中若發現使用常量則直接以符號表中的值替換)
但是有時它也會退化為常變數,比如:
int c=10;
const int a=c;//當被初始化為變數時
注意:
如何解釋取位址?
編譯過程中若發現對const使用了extern或者&操作符,則會對應的常量分配儲存空間(為了相容c)。c++編譯器雖然可能為const常量分配空間(進行&運算時),但是不會使用其儲存空間中的值。
結論:c語言中const常(變)量:其是唯讀變數,有自己的儲空間,能通過位址間接修改其的值。
c++中的const常量:其是放在符號表中,可能分配儲存空間,也可能不分配儲存空間 ,使用&符號時候才分配乙個臨時記憶體空間。
const在C與C 中的區別
const修飾的變數稱為常變數,在編譯階段,判斷其有沒有做左值,其他用法與普通變數一樣。普通變數存放資料在執行階段才能知道 const修飾的變數稱為常量,也是在編譯階段,將常量出現的地方替換為相應初始化的值 1.常量不能修改 直接與間接 2.const 修飾全域性變數是將其變為local 3.必須初...
const在C語言和C 中的區別
const在c語言和c 中的對比一 const在c語言和c 中的對比二 下面這段 在c語言中和c 中表現出不同結果 int main 環境 c語言中 c 中 結果20 10c 中的10對嗎?如果你認為沒有被修改,那麼你就錯了,這裡的10是錯誤的,printf列印的時候是在暫存器上獲取的,而記憶體中的...
const在C語言和C 中的區別
對於c語言和c 熟悉的人都知道 const 這個修飾符的存在。在很多面試公司中,const 這個修飾符的面試題筆試題也是一直都有的,那對於const這個修飾符你真的了解嗎?問到const 這個修飾符的用處,很多人都會說,用const修飾符修飾的變數表示該變數是常亮,是唯讀的,無法修改的。其實對於這樣...