1 5 const和volatile深度理解

2021-07-26 19:46:06 字數 760 閱讀 8505

1、在c語言中const修飾的變數是唯讀的,其本質還是變數

2、const修飾的變數會在記憶體占用空間

3、本質上const只對編譯器有用,在執行時無用

4、不能直接改變const變數的值,要用指標改變

5、const int cc = 1;

int *p = (int *)&cc;

p = 3;

6、在語言中const修飾的陣列是唯讀的

7、const修飾的陣列空間不可被改變

8、const int * p    //p可變,p指向的內容不可變

int const* p     //p可變,p指向的內容不可變

int* const p     //p不可變,p指向的內容可變

const int * const p  //p不可變,p指向的內容不可變

口訣:左數右指

當const出現在*號左邊時指標指向的資料為常量

當const出現在*後右邊時指標本身為常量

9、const修飾函式引數表示在函式體內不希望改變引數的值

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

11、任何的警告都要當做錯誤處理

12、volataile可理解為"編譯器警告指示字"

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

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

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

13、硬體中斷造成不可預知的錯誤

synchronized和volatile的區別?

一旦乙個共享變數 類的成員變數 類的靜態成員變數 被volatile修飾之後,那麼就具備了兩層語義 1 保證了不同執行緒對這個變數進行操作時的可見性,即乙個執行緒修改了某個變數的值,這新值對其他執行緒來說是 立即可見的。2 禁止進行指令重排序。volatile本質是在告訴jvm當前變數在暫存器 工作...

synchronized和volatile的區別

volatile關鍵字的本質是告訴jvm,該變數在暫存器中的值是不確定的,需要在主存中讀取,而synchronized關鍵字是鎖住當前變數,只有當前執行緒可以訪問,其他執行緒等待。volatile關鍵字的作用 保證變數的可見性和防止指令重排序。1.volatile只能作用於變數,而synchroni...

15分鐘弄懂 const 和 define

1.什麼是const const是c c 中的乙個關鍵字 修飾符 const一般用來定義乙個常量,既然叫做常量,即以後再也不能修改其值.const定義常量 2.什麼是 define?而define,巨集定義,則是一條預編譯指令,編譯器在編譯階段會將所有使用到巨集的地方簡單地進行替換.如下圖所示 巨集...