C語言關鍵字const volatile的詳細描述

2021-08-22 19:42:30 字數 1195 閱讀 6214

以const關鍵字修飾的物件,其值不能通過賦值或遞增、遞減進行修改。但是可以通過指標訪問的方式修改const修飾物件的值(也會報警告)。

const int num = 20;

//num = 10; 賦值出錯

//num++; 遞增出錯

//num--; 遞減出錯

int* p = #

*p = 100;

//可以通過位址訪問的方式修改const修飾物件的值

printf("%d\n",num);

所以,const修飾的物件變成唯讀變數,無法常規修改。

當const修飾指標時,要區分const是修飾指標本身,還是修飾指標所指向的值。

const char* p;//限定指標指向的值

char* const p;//限定指標

const char* const p;//限定指標指向的值和指標

限定指標指向的值:指標指向的值不能被改變,但指標本身可以改變,即更改指標的指向。

限定指標:指標本身的值不能被改變,但指標所指向的物件的值可以改變。

限定指標指向的值和指標本身的值:指標指向的值和指標本身的值都不能被改變。

c語言:不希望該函式改變某一形參,所以對該形參使用const修飾;

c++:傳給該函式的某一形參的值為常量,也不能修改,所以必須對該形參使用const修飾。

以上理解可能存在問題,歡迎指正。

全域性變數是很容易被修改的,如果加上const修飾,即可避免不必要的麻煩。

volatile限定符告訴計算機,修飾的物件可能會被隱式地修改,涉及到編譯器的優化。

int x = 10;

printf("%d\n",x);

/*一些不使用 x 的***//編譯器認為 x 的值沒有被改變,所以直接取緩衝區的值(上一次取的值)

printf("%d\n",x);

在兩次呼叫 x 的**之前,若**沒有使用 x 的**,則編譯器會認為 x 的值沒有被改變,所以直接取緩衝區的值,並沒有從記憶體中取。但使用volatile來修飾物件,則表明該物件的值可能會被隱式修飾,所以每次取該物件的值都會從記憶體中取,編譯器不對該物件進行優化。

const 和 volatile 可以同時修飾乙個物件,表明該物件不可以改變,但可以隱式改變(**可以改變)。

未完……

C語言關鍵字

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

C語言關鍵字

關鍵字就是已被c語言本身使用,不能作其它用途使用的字。例如關鍵字不能用作變數名 函式名等 由ansi標準定義的c語言關鍵字共32個 auto double int struct break else long switch case enum register typedef char extern...

c語言關鍵字

c 語言標準定義的32 個關鍵字 1 auto 宣告自動變數,預設時編譯器一般預設為auto int 宣告整型變數 double 宣告雙精度變數 雙精度浮點型 long 宣告長整型變數 char 宣告字元型變數 float 宣告浮點型變數 單精度浮點型 6.1 float的有效位通常有 位,指的是小...