第9課 const和volatile分析

2021-09-26 14:56:38 字數 2394 閱讀 6611

(1)const修飾的變數是唯讀的,本質上還是變數

(2)const修飾的區域性變數在棧上分配空間;const修飾的全域性變數在全域性資料區分配空間

(3)const只在編譯期間有用,在執行期間無用

(4)const修飾的變數不是真正的常量,它只是告訴編譯器該變數不能出現在賦值符號的左邊

(1)在現代c語言編譯器中,將const 修飾的全域性變數分配在唯讀儲存區。因此,無論是顯示的還是隱式的(指標)修改都將導致程式出現段錯誤進而崩潰。

(2)在標準c語言編譯器中,不會將const 修飾的全域性變數儲存於唯讀儲存區中,而是儲存於可修改的全域性資料區,通過指標仍然可以對其值隱式的修改。

1 #include 2

3const

int g_cc = 2; //

現代c編譯器 唯讀儲存區45

intmain()

6

const變數的本質

(1)c 語言中的const 使得變數具有唯讀屬性

(2)現代c 編譯器中的const 將具有全域性生命週期的變數儲存於唯讀儲存區

1 #include 2

3const

int g_array[5] = ;45

void modify(int* p, intv)6

910intmain()11;

1516 modify((int*)&i, 1); //

ok17 modify((int*)&j, 2); //

error

18 modify((int*)&array[0], 3); //

ok19 modify((int*)&g_array[0], 4); //

error

2021 printf("

i = %d\n

", i);

22 printf("

j = %d\n

", j);

23 printf("

array[0] = %d\n

", array[0

]);24 printf("

g_array[0] = %d\n

", g_array[0

]);25

26return0;

27 }

const的本質分析

(1)const修飾函式引數表示在函式體內不希望改變引數的值   【輸入性引數】

(2)const修飾函式返回值表示返回值不可改變,多用於返回指標的情形

tip:c 語言的字串字面量儲存於唯讀儲存區中,在程式中需要使用const char*指標

11const修飾函式引數與返回值

(1)volatile可理解為 "編譯器警告指示字"

(2)volatile告訴編譯器必須每次去記憶體中取變數值

(3)volatile主要修飾可能被多個執行緒訪問的變數

(4)volatile也可以修飾可能被未知因數更改的變數

const  volatile  i  =  0;

ⅰ:變數 i 具有什麼樣的特性?   i為int型變數,每次都必須到記憶體取值,且i是唯讀變數

ⅱ:編譯器如何處理這個變數?  i不能作為左值

(1)const使得變數具有唯讀屬性

(2)const不能定義真正意義上的常量

(3)const將具有全域性宣告週期的變數儲存於唯讀儲存區

(4)volatile強制編譯器減少優化,必須每次從記憶體中取值

MySQL學習筆記第9課(共10課)

40 複製 一種高可用 高效能的解決方案,一般用來建立大型的應用。三個步驟 1 主伺服器把資料更新記錄到二進位制日誌中 2 從伺服器把主伺服器的二進位制日誌拷貝到自己的中繼日誌中 3 從伺服器重做日誌中的時間,把更新應用到自己的資料庫上 mysql的複製是非同步同步的,並非完全的主從同步。從伺服器上...

Flash入門 基本動畫 第9課

今天的課程是 基本動畫 單元的最後一節課了。在 基本動畫 這個單元,我們已經介紹了3種種型別的動畫 逐幀動畫 形狀補間動畫 運動補間動畫。實際上這三種動畫就是flash動畫最核心和基本的動畫方式,在後面的 動畫高階 單元,我們還會介紹兩種基於補間動畫的動畫,他們都是以補間動畫為基礎的,他們分別叫做 ...

第9課 函式定義及呼叫

1 make 直譯器提供了一系列的函式供 makefile 呼叫 預定義函式 2 在 makefile 中支援自定義函式實現,並呼叫執行 自定義函式 3 通過define關鍵字實現自定義函式 2.1 自定義函式的語法 函式定義 其中,0 代表被呼叫的函式名,1 2 3 代表呼叫函式時後面的傳參 函式...