C 複習筆記(一) const

2021-09-07 06:13:46 字數 1222 閱讀 5426

const

const可用來定義乙個常量。如:

const int i; // 定義乙個int型別的常量

int const i;//同上

const int * p; //定義乙個指向常量的指標,即不能通過指標修改這個指標指向的值(可以改變p,但不能改變*p)

int * const p; //定義乙個常量的值,即不能修改這個指標的指向,但可以修改其指向位址上所儲存的指(可以改變*p,但不能改變p)

const int * const p;`//*p不能修改,p也不能修改

const修飾成員函式時

當在乙個類中,const用來修飾成員函式時,const修飾的成員函式裡,不能修改任何成員變數,而且const修飾的成員函式裡,不能呼叫非const修飾的成員函式,以防非const修飾的成員函式改變了成員變數(呼叫的話會編譯錯誤),如:

class a

//普通的成員函式,為a賦值

void yy() const //const要寫在函式後面,寫在前面就成修飾函式返回值

};

const修飾成員變數時

在類中,const修飾成員變數時,不可以直接初始化,初始化必須在建構函式初始化列表中初始化,如:

class b

};

const修飾函式返回值時

const在修飾函式返回值時,函式傳遞出來的值(即返回值)應該也用const修飾的值來接,如:

const int yy()

int main()

關於const的記憶體分配

在c語言中,const常量就是唯讀常量,會為它分配記憶體空間,即有自己的儲存空間;

但在c++中,const常量不一定會為其分配記憶體。對於大多基本資料型別的常量,編譯器一般是將其放入符號表中,這樣是沒有為其分配記憶體的,在編譯過程中若發現使用常量則直接以符號表中的值替換。一下幾種情況是會為其分配儲存空間:

(1)const常量為全域性常量,且在其它檔案中被使用(即在其它檔案使用了extern將其呼叫)

(2)使用了&操作符取const常量的位址

(3)const定義的常量是未知的時候

const與define是有區別的

const常量是由編譯器處理的,而define是在預處理器處理的,即在編譯前的預編譯就將define定義的值進行了文字替換。

`

複習 C 之const成員

const int num 0 常量必須要初始化,而且不可修改。int num 100 const int p 在這兩句 後,p可以修改,p不可以修改。int num 100 int const p 在這兩句 後,p可以修改,p不可以修改。所以變數能不能修改看的是宣告時const後面的是什麼。con...

c語言複習筆記一

1 解釋語言與編譯語言,語言本身沒有這些分別,只是我們常用的到執行的這種型別 python是解釋型語言,不需要編譯 解釋就是借助乙個程式,那個程式能夠理解我的程式,並按照要求執行 c語言是編譯型語言 原始檔.c 預處理程式 cpp 得到.i 編譯程式 ccl 得到.s彙編原始檔 匯程式設計序得到.o...

c 複習之const修飾問題

const修飾問題主要分為四種情況 重點是看const在 的哪一邊 比如 int a 500 int b 100 const int c a 情況1 const在 的左邊,表明指標c指向的為常量,不可以通過指標c來改變c所指向的內容 但c可以改變指向的內容,如c b int const d a 情況...