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物件預設為檔案...