學習C++第四天,在看《c++程序設計語言特別版》,昨天看到了指針和常量,一頭霧水,只能這么形容,可能時間有點晚了,注意力不夠集中了,反正是沒看明白,今天趕緊接上,爭取渡過這個難關,真別說,靜下心來細細的看一會,真的有收獲,怕忘了,趕緊記下,大家看我理解的對不對。
《c++程序設計語言特別版》5.4.1 指針和常量
“將一個指針的聲明用const‘預選固定’將使那個對象而不是使這個指針成為常量”:
理解:一個指針的聲明,如 char* pc -- pc是指針,加const后 const char* pc = s;,則使pc所指的內容s成為常量,pc就成了指向常量的指針
“要將指針本身而不是被指對象聲明為常量,我們必須使用聲明運算符*const”
理解:*const 是運算符,可以將指針本身聲明為常量
void f1(char* p)
{
(1) char s[] = "Gorm";
(2) const char* pc = s; //指向常量
(3) pc[3] = 'g'; //錯誤:pc是指向常量的
(4) pc = p; //ok
(5) char *const cp = s; //常量指針
(6) cp[3] = 'a'; //ok
(7) cp = p; //錯誤:cp是常量指針
(8) const char *const cpc = s; //到const的const指針
(9) cpc[3] = 'a'; //錯誤:cpc指向常量
(10) cpc = p; //錯誤:cpc本身是常量
}
理解:
(2) char* pc---指針的聲明
const char* pc=s---指s成為常量,pc成為指向常量的指針
(3) pc[3]='g';錯誤---原因:pc所指的內容已經是常量,不能對p所指的內容賦值pc[3]=....相當于對pc所指的內容賦值了
(4) pc=p;正確---原因:pc本身并不是常量,是指針,同傳入的參數p一樣
(5)通過*const,將指針本身變成了常量,故cp是常量指針
(6)cp[3]='a';正確---原因:cp本身是常量,但其所指的內容不是常量,故可以對其所指的內容進行賦值,cp[3]就是其所指的內容
(7)cp=p;錯誤---原因:cp本身是常量,不能對常量進行賦值
//如果上面這些都能理解,那面下面這句一看就明白了:)
(8)*const將cpc聲明成了常量指針(cpc是常量,是指針),前面再加一個const,則cpc所指的內容也成了常量(s成了常量),故cpc是指向常量的常量指針(到const的const指針)
(9)(10)不用說了,cpc是常量,其所指的內容也是常量,既不能對其所指的內容cpc[3]賦值,也不能對其本身cpc賦值。
OK,記錄完畢,語言很顯羅嗦,實是為了明天看時還能看懂:),有理解不對的地方,還望指教。
posted on 2007-06-08 22:29
zhanghaibin 閱讀(247)
評論(1) 編輯 收藏 引用 所屬分類:
學習筆記