(1)const修飾的變數是唯讀的,本質上還是變數
(2)const修飾的區域性變數在棧上分配空間;const修飾的全域性變數在全域性資料區分配空間
(3)const只在編譯期間有用,在執行期間無用
(4)const修飾的變數不是真正的常量,它只是告訴編譯器該變數不能出現在賦值符號的左邊
(1)在現代c語言編譯器中,將const 修飾的全域性變數分配在唯讀儲存區。因此,無論是顯示的還是隱式的(指標)修改都將導致程式出現段錯誤進而崩潰。
(2)在標準c語言編譯器中,不會將const 修飾的全域性變數儲存於唯讀儲存區中,而是儲存於可修改的全域性資料區,通過指標仍然可以對其值隱式的修改。
1 #include 2const變數的本質3const
int g_cc = 2; //
現代c編譯器 唯讀儲存區45
intmain()
6
(1)c 語言中的const 使得變數具有唯讀屬性
(2)現代c 編譯器中的const 將具有全域性生命週期的變數儲存於唯讀儲存區
1 #include 2const的本質分析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 }
(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 代表呼叫函式時後面的傳參 函式...