c中的const與c 中的const

2021-08-01 07:17:03 字數 1157 閱讀 6048

c中的const是乙個偽唯讀識別符號。

#include 

#include

int main()

此時輸出a的值為20,被指標間接的改變了。

c++中,const進行了增強,不在是乙個偽識別符號了。

const

int a = 10;

int *p = (int *)&a;

*p = 20;

cout

<< a << *p << endl;

cout

<< &a << endl;

cout

<< p;

輸出:

a :10;

*p :20;

兩者的位址是一樣的。

那麼問題來了,既然兩者所指向的位址是一樣的,那為什麼內容不一樣呢?請繼續往下看。

c++編譯器引入了乙個符號表,當碰見常量宣告時,在符號表中存放常量,那麼如何解釋取位址呢?

編譯過程中若發現使用常量則直接以符號表中的值替換編,譯過程中若發現對const使用了extern或者&操作符,則給對應的常量分配儲存空間。

結論

c語言中的const變數

c語言中const變數是唯讀變數,有自己的儲存空間

c++中的const常量

可能分配儲存空間,也可能不分配儲存空間

當const常量為全域性,並且需要在其它檔案中使用

當使用&操作符取const常量的位址

聯想 const和#define的區別

對比加深

c++中的const常量類似於巨集定義

const int c = 5; ≈ #define c 5

c++中的const常量在與巨集定義不同

const常量是由編譯器處理的,提供型別檢查和作用域檢查

巨集定義由預處理器處理,單純的文字替換

void fun1()

void fun2()

int main(int argc, char *argv)

a 可以在fun2中使用,而b不能在fun2中使用,說明const提供了型別和作用域的檢測。

c 中的const與指標

在c c 中,指標本身就是乙個難點,再加與const的結合,常會產生許多讓人費解的地方,在這裡做個小結。1.定義const物件 const int buffsize 512 因為常量定義後就不能修改,所以定義時必須初始化.const i,j 0 error,i沒有初始化 2.const物件預設為檔案...

c 中的const與指標

原文 c c 中,指標本身就是乙個難點,再加與const的結合,常會產生許多讓人費解的地方,在這裡做個小結。1.定義const物件 const int buffsize 512 因為常量定義後就不能修改,所以定義時必須初始化.const i,j 0 error,i沒有初始化 2.const物件預設為...

C 中的const與指標

在c c 中,指標本身就是乙個難點,再加與const的結合,常會產生許多讓人費解的地方,在這裡做個小結。1.定義const物件 const int buffsize 512 因為常量定義後就不能修改,所以定義時必須初始化.const i,j 0 error,i沒有初始化 2.const物件預設為檔案...