const用法之修飾指向常量的指標

2022-04-05 12:33:02 字數 986 閱讀 4791

在xp平台使用vc++6.0編譯執行如下**:

1

char *s="

aaa"

;2 printf("

%s\n

",s);

編譯執行一切正常,但如果在加入一些**,例如:

1

char *s="

aaa"

;2 printf("

%s\n

",s);

3 s[0]='b'

;4 printf("

%s\n

",s);

編譯通過,但執行過程中輸出「aaa」之後,系統彈出「帶除錯的傳送錯誤報告」對話方塊,問題表現出來啦。

這其實是乙個概念性的問題,aaa是字串常量,為了對它進行操作,定義了乙個指標char *s,但是,s是乙個普通的指向char型「變數」的指標,用乙個指向變數的指標指向常量,自然會留下隱患。例如像**中那樣對s[0]進行賦值,編譯器不會發現這個錯誤,但是,只有變數的值才是可以修改的(常量無法被賦值,也無法被修改),這個動作的意圖是通過指標s來修改乙個常量的值,於是,執行的時候錯誤發生了。

解決這個問題的辦法就是從「aaa」最本質的歸屬出發,需明確告訴編譯器,指標指向的型別是常量,不可修改,於是:

1

const

char *s="

aaa"

;2 printf("

%s\n

",s);

這樣,如果再有對「aaa」有寫的動作,編譯器就會提示錯誤,減少後期bug的出現,這也是const的乙個重要用法。

這是乙個入門的問題,也是乙個隱蔽性很高的問題,在此列出,以示警醒。

2013-05-01

其它延伸:

const指標的性質:假設有

int *p const = &a;

那麼,可以改變p所指向的值,但不能改變p儲存的位址。

const修飾指標與修飾常量

1.const 修飾指標 常量指標 eg const int p a 特點 指標的指向可以修改,但是指標指向的值不能修改 int a 10 int b 20 int p a p 20 錯誤 p b 正確 2.const 修飾常量 指標常量 eg int const p a 特點 指標的指向不能修改,...

const常量 指向常量的指標和常量指標

1 先看const常量的情況 const int a 2 int const b c c是已經宣告過的整型 兩者都可以。本地的const常量必須在第一次宣告時就初始化,用變數或常量初始化都可以,只是初始化一次以後它的值就不能再改變了,此所謂const的含義。2 接著看指向常量的指標 const in...

const修飾指標的用法 常量指標和指標常量

const通常用來修飾變數不能夠更改值,多用來保護變數或引數。const int b 100 b 0 錯誤 當const修飾指標時,由於const的位置不同,它的修飾物件會有所不同。如下 int const p2中const修飾p2的值,所以理解為p2的值不可以改變,即p2只能指向固定的乙個變數位址...