九 const 和volatile 分析

2021-10-03 03:10:08 字數 1529 閱讀 5479

const 唯讀變數

const 修飾的變數是唯讀的,本質還是變數

const 修飾的區域性變數在棧上分配空間

const 修飾的全域性變數在全域性資料區分配空間

const 只在編譯期,在執行期無用

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

在現代c語言編譯器中,修改const 全域性變數將導致程式崩潰

注意:標準c語言編譯器不會將const 修飾的全域性變數儲存於唯讀儲存區中,而是儲存於可修改的全域性資料區,其值依然可以改變

const int g_cc  = 2;
int main(int argc, char *ar**)
例2:

#include
const int g_array[5] = ;
void modify(int *p, int v)
int main(int argc, char *ar**)
;
modify((int*)&i,1);
modify((int*)&j,2);
modify((int*)&array[0],3);
modify((int*)&g_array[0],4); // 修改會報錯, const全域性變數會被編譯進唯讀儲存區
printf("i =%d\n",i);
printf("j = %d\n",j);
printf("array[0] = %d\n",array[0]);
printf("g_array[0] = %d\n",g_array[0]);
return a.exec();
}
const 修飾函式引數和返回值
const修飾函式引數表示在函式體內不希望改變引數的值

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

小貼士:

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

例三:

const char * f(const int i)
int main(int argc, char *ar**)
volatile
volatile 可理解為「」編譯器警告指示字「

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

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

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

筆記 關於const和volatile

關於這方面的內容,我自己經驗不夠說得不夠清楚。但又想記錄下來,於是上網找了的提問。問題帖子 1.volatile volatile標識乙個變數意味著這個變數可能被非本程式的其他過程改變,例如某個訪問這一變數的某中斷程式。為變數加上這一標識可以禁止編譯器的優化,使程式正確地按設計者的意圖執行。例如下面...

const和volatile的區別

一.關鍵字const有什麼含意?只要一聽到說 const意味著常數 就知道我正在和乙個業餘者打交道。去年dan saks已經在他的文章裡完全概括了const的所有用法,因此esp 譯者 embedded systems programming 的每一位讀者應該非常熟悉const能做什麼和不能做什麼....

1 5 const和volatile深度理解

1 在c語言中const修飾的變數是唯讀的,其本質還是變數 2 const修飾的變數會在記憶體占用空間 3 本質上const只對編譯器有用,在執行時無用 4 不能直接改變const變數的值,要用指標改變 5 const int cc 1 int p int cc p 3 6 在語言中const修飾的...