[問題] 關於const與pointer
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
VC2013
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
No
問題(Question):
const修飾字與pointer關係
程式碼(Code):(請善用置底文網頁, 記得排版)
1. pointer/variable 之間使用const
1-1
const int n = 1;
int *p = &n; //Invalid
1-2
int n = 1;
const int *p = &n; //Valid
2. pointer/pointer之間使用const
2-1
int n = 1;
int *p1 = &n;
const int **p2 = &p1; //Invalid
2-2
int n = 1;
const int *p1 = &n;
int **p2 = &p1; //Invalid
補充說明(Supplement):
pointer一直是我這種程式新手的痛處,希望版上各位能指點一下小弟迷津。
我希望能找出每一個範例結果的理由,
用以去理解它為何被compiler判定是pass或reject,
而不是死背結果,這並沒有用處。
範例1-1與1-2我是這樣解釋的:
1-1:
變數n已經被宣告為const int,但用一個非const int型態去指向它的位址,
可能導致*p改變n本身的數值。
1-2:
n被宣告為int型態,與指向它、型態為const int的*p無關。
*p被宣告為const int,表示p永遠指向n的位址,無法改變。
但是n本身的數值做任何修改,與p無關。若修改n=2,則*p=2。
請問以上我自己的理解是否有錯?
想來版上詢問的是範例2的兩個例子,
尤其是2-2,對照1-2可以,為何2-2不行呢?
可否請版上各位高手解釋它的理由?不勝感激。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 1.169.81.145
→
01/21 13:14, , 1F
01/21 13:14, 1F
→
01/21 13:24, , 2F
01/21 13:24, 2F
推
01/21 13:57, , 3F
01/21 13:57, 3F
→
01/21 13:58, , 4F
01/21 13:58, 4F
翻了一下書,感謝B大糾正我的觀念錯誤。
原來p不是const,*p才是const。
→
01/21 13:58, , 5F
01/21 13:58, 5F
好的。
→
01/21 13:59, , 6F
01/21 13:59, 6F
compiler是給這樣的訊息
2-1 無法由int**轉換為const int**
2-2 無法由const int**轉換為int**
→
01/21 13:59, , 7F
01/21 13:59, 7F
→
01/21 14:00, , 8F
01/21 14:00, 8F
推
01/21 15:01, , 9F
01/21 15:01, 9F
抱歉,我沒說清楚。我指的是VC2013發出error,不是warning。
※ 編輯: Keitaro 來自: 1.169.81.145 (01/21 16:00)
討論串 (同標題文章)
完整討論串 (本文為第 1 之 2 篇):