c 語言的關鍵字 const詳解
1, 基本的const
1.1 const和變數的初始化
如果在定義const自動變數時沒有進行初始化,
那麼就沒法直接進行初始化,而只能通過指標間接進行初始化。
intmain()
1.2 以下定義是相同的
int const a = 9;
const int a = 9;
記住:const和基本自動變數使用,定義時可以交換位置。
在和指標一起定義某個變數時,不能交換。
1.3 const並非無法修改
無法直接修改const的變數,但可以通過指標的方式
間接修改。
void
test1(void)
2, const 和指標
const和指標在一起使用時,容易搞混,
在網上找到乙個識別的方法覺得用起來很不錯:
捨棄法識破const。
1)首先捨棄const, 得到乙個普通的宣告;
2)若有多個const從最左邊的const開始去。
3)然後捨棄const右面的const標誌以及其它的關鍵字;
4)接下來就是將const右面所有的*和變數用乙個新變數代替,
單個字元不用被取代,那麼這個新變數就是const作用物件。
下面先給出這幾個表示式的解釋,後面用例子說明。
const int *a; //修飾指向的物件,a可變,a指向的物件不可變
int const *a; //修飾指向的物件,a可變,a指向的物件不可變
int *const a; //修飾指標a, a不可變,a指向的物件可變
const int *const a; //指標a和a指向的物件都不可變
2.1 const int *a;和 int const *a;
按照上面的3條,這兩個的表示式的作用應該是一樣的。
const的作用物件應該是*a這個整體。也就是作用於a指向的變數的值。
61 void
62 test4(void)
63 61-68行可以看出,const int *a的確修飾的是*a這個整體,也就是
指標指向的值。
下面的這個例子說明了,雖然無法改變*a的值,但是可以改變a指標本身。
71 void
72 test5(void)
73 ;
75 const int *ar = &a;
76 77 *ar++; //ok
78 printf("result=%d/n",*ar); //result=2
79 }
2.2 int *const a; 和 const *int a;
const *int a; //這樣的定義格式是錯誤的,指標不知道是什麼型別。
int *const a;
按照上面的規則我可以判斷,該const是修飾的a,而a被定義為乙個指標。
所以他限定的物件是a這個指標。也就是說a的指標值不能修改。
#include
int
main(void)
;int *const ar = a;
*ar++; //error
//若是這樣寫,就對了:
//*ar = 9; // ok
printf("result=%d/n",*ar); //result=2
return 0;
}編譯無法通過,出現錯誤:
test2.c: in function 『main』:
test2.c:9: 錯誤:令唯讀變數 『ar』 自增
2.3 const int *const a; //指標a和a指向的物件都不可變
通過分析知道,該定義中const限制了*a和a。也就是這
兩個(作為整體)都不能改變。
1 #include
2 3 int
4 main(void)
5 ;7 const int *const ar = a;
8 9 //*ar++; //error
10 *ar = 9; // error
11 printf("result=%d/n",*ar); //result=2
12 return 0;
13 }
3, 作為引數時的const
17 void
18 testpc(const char *s, const int *a)
19 24 }
根據規則,這樣的賦值是錯誤的,但如果改變其位址卻可以。
const int *a;的意思是不能改變 *a這個整體的值。
c關鍵字const詳解
最近被人問了個技術問題,感觸很深,就是關於const關鍵字的基本用法判斷,看到這個問題我其實挺開心的,因為去年我在書上記錄過c 語言的幾個常用關鍵字的基本用法,最近用的少了,都有點生疏遺忘了,技術就是一把容易生鏽的dao,得經常磨磨才不怕問 1.const修飾變數 const 關鍵字用的比較多的用法...
C語言關鍵字 Const
c中const的使用 雖然這聽起來很簡單,但實際上,const的使用也是c語言中乙個比較微妙的地方,微妙在何處呢?請看下面幾個問題。問題 const變數 常量 為什麼下面的例子在使用乙個const變數來初始化陣列,ansi c的編譯器會報告乙個錯誤呢?const int n 5 int a n 答案...
C語言關鍵字const
const 是constant的縮寫,只要有變數前面用const修飾,就意味著該變數裡面的資料是readonly。const可以修飾基本型別,構造型別,指標,等。const int a 10 去掉int a 的值不變 int const a 10 去掉int a的值不變 const int a 10...