c語言與c 中const的區別

2021-08-09 14:34:12 字數 1912 閱讀 7290

首先宣告一下: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

#include

using 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修飾符修飾的變數表示該變數是常亮,是唯讀的,無法修改的。其實對於這樣...