C 語言的關鍵字 const詳解

2021-04-25 05:06:51 字數 2422 閱讀 2627

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...