面試點 關鍵字const C語言面試題分析之四

2021-05-25 11:41:20 字數 1908 閱讀 3633

面試點:關鍵字const

c

語言面試題分析之四

const int i=5;

int j=0;

...i=j;//

非法,導致編譯錯誤

j=i;//

合法const int i=5;//

合法const int j;//

非法,導致編譯錯誤

extern const int i;//

合法extern const int j=10;//

非法,常量不可以被再次賦值

用const

方法可以使編譯器對處理內容有更多了解。

#define i=10

const long &i=10;/*

說明:由於編譯器的優化,使

得在const long i=10時,i

不被分配記憶體,而是已

10直接代入

以後的引用中,以致在以後的**中沒有錯誤,為達到說教效

果,特別地用

&i明確地給出了

i的記憶體分配。不過一旦你關閉所

有優化措施,即使

const long i=10

也會引起後面的編譯錯誤。*/

char h=i;//

沒有錯char h=i;//

編譯警告,可能由於數的截短帶來錯誤賦值。

#define string "abcdefghijklmn/n"

const char string="abcdefghijklm/n";

...printf(string);//

為string

分配了第一次記憶體

printf(string);//

為string

一次分配了記憶體,以後不再分配

...

printf(string);//

為string

分配了第二次記憶體

printf(string);

... 由於

const

定義常量從彙編的角度來看,只是給出了對應的記憶體位址,

而不是象

#define

一樣給出的是立即數,所以,

const

定義的常量在

程式執行過程中只有乙份拷貝,而

#define

定義的常量在記憶體中有

若干個拷貝。

int value();

const int i=value();

假定對rom編寫程式時,由於目標**的不可改寫,本語句將會無效,不過可以變通一下:

const int &i=value();

只要令i的位址處於

rom之外,即可實現:

i通過函式初始化,而其

值有不會被修改。

觀察以下一段**:

const int i=0;

int *p=(int*)&i;

*p=100;

通過強制型別轉換,將位址賦給變數,再作修改即可以改變

const

常量值。

int ii=0;

const int i=0;//i

是常量,

i的值不會被修改

const int *p1i=&i;//

指標p1i

所指內容是常量,可以不初始化

int* const p2i=ⅈ//

指標p2i

是常量,所指內容可修改

const int * const p3i=&i; //

指標p3i

是常量,所指內容也是常量

p1i=ⅈ//

合法*p2i=100;

//合法

面試點 解讀關鍵字volatile

面試點 解讀關鍵字volatile c語言面試題分析之一 一 volatile是什麼?volatile關鍵字是一種型別修飾符,用它宣告的型別變數表示可以被某些編譯器未知的因素更改,比如 作業系統 硬體或者其它執行緒等。遇到這個關鍵字宣告的變數,編譯器對訪問該變數的 就不再進行優化,從而可以提供對特殊...

面試 static關鍵字

static可以修飾變數和函式 修飾函式 改變該函式的連線屬性,表明該函式只能在當前檔案中使用 修飾變數 全域性變數 表明該變數只能在當前檔案中使用 函式體中的區域性變數 1.延長該變數的生命週期 和成員函式的生命週期一樣 2.類似該變數具有記憶的功能 3.存放位置不同於函式體中的區域性變數 因為c...

C語言關鍵字

c語言關鍵字 在檔案範圍的教訓和關鍵字,你知道靜態變數保持他們的價值觀,甚至不在他們超出範圍的破壞。比如說呢。int generateid int main this program prints 01 2 請注意,s nid一直保持它的價值的跨多個函式呼叫。static關鍵字有另一種意思當應用到全...