有關const關鍵字的整理

2021-09-30 09:36:24 字數 1112 閱讀 8249

顧名思義const是constant的縮寫,意義為永恆不變的意思。常常被翻譯為常量,常數等意思。但是很不幸,正是由於這一點導致很多c程式設計師認為const修飾的值為常數。這是不正確的,const修飾的是唯讀變數,在預處理(編譯)時是不知道具體內容的。

在c語言中,這樣寫乙個函式對嗎?為什麼呢?

const int max = 100;

int array[max];

其實這個程式在c語言的編譯器中執行是會產生錯誤警告的,因為c語言中const修飾的是變數,而陣列在定義是必須告訴編譯器它的元素個數,因此max是不能作為變數出現在陣列中的。這個程式在c++編譯器上執行正確,想想為什麼 ?

用const修飾的唯讀變數可以節省記憶體,提高效率。因為編譯器通常不會為const變數分配空間的,將他們存在符號表中,使其成為乙個編譯期間的值,沒有讀寫記憶體的操作,自然提高了效率。

從彙編的角度來說,定義const變數只是給出了對應記憶體的位址,而不是像#define那樣給出了立即數。因此,在執行程式的過程中const只有乙個拷貝,而巨集定義則有若干個。另外,#define巨集定義是在預編譯時進行替換,而const變數是在編譯時確定其值。,#define巨集定義是沒有型別的,而const變數有固定的型別。

下面是介紹幾種關於const的用法:

1.修飾一般變數:修飾符可放型別說明前,也可放在型別說明後。例如:const int i =10;或int const i = 10;

2.修飾陣列:int const a[5] =;或 const int a[5] = ;

3.修飾指標:const int *p; // p 可變,p 指向的物件不可變

int const *p; // p 可變,p 指向的物件不可變

int *const p; // p 不可變,p 指向的物件可變

const int *const p; //指標p 和p 指向的物件都不可變    

4.修飾函式引數:當你不希望函式的引數被函式體內進行任意的改變時,可以用const進行修飾。

例如:int fun(const int n) ;這就告訴編譯器在函式內部不能對變數n進行改變,以防止出錯。

5.修飾函式返回值:const還可以修飾函式返回值,例如:const int fun(void);在另一鏈結檔案中引用唯讀變數。

const關鍵字用法

1 const常量 如const int max 100 優點 const常量有資料型別,而巨集常量沒有資料型別。編譯器可以對前者進行型別安全檢查,而對後者只進行字元替換,沒有型別安全檢查,並且在字元替換時可能會產生意料不到的錯誤 邊際效應 2 const修飾類的資料成員 class a const...

關鍵字const詳解

關鍵字const 1 用關鍵字const定義變數指所定義的常量。即恆定的變數,即不可改變的變數。例 const int i 10 此時 i 就是乙個整型的常量,其值不能改變。在c 中如果用const定義乙個物件,那麼物件中的成員變數就是常數,不能改變 只能為初始化的值 如果用const定義類中的成員...

const關鍵字用法

const修飾符表示該變數的值不能被改變。但得分兩種情況討論 修飾普通變數和修飾指標變數。1.普通常量 const int foo 5 表示foo不能再被賦值 foo 8 錯誤,因為foo是const修飾為不可變常量了 2.修飾指標 const char p test 表示p指向 的記憶體不可改變,...