以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的有效位通常有 位,指的是小...