Re: [問題] 關於const與pointer
這個問題印象中版上很久以前有討論過.
[2-1]
int n = 1;
int *p1 = &n;
const int **p2 = &p1; // Invalid (const int **) = (int **)
問題是 int ** 是否可轉型為 const int **
答案是不可以. 理由是這樣可能會造成問題:
如果我們允許這個轉型的話則下面都會合法:
const int c = 1;
*p2 = &c; // (const int *) = (const int *) 合法
*p1 = 10; // (int) = (const int) 合法
這樣的話因為 p2 指向 p1, 所以 *p2 就是 p1, 而 *p2 = &c 會讓 p1 指向 c
這時 *p1 就是 c, 那 *p1 = 10 會改 c 的值為 10.
最後 c 的值因此會成為 10 而違反一開始 const 的性質.
[2-2]
int n = 1;
const int *p1 = &n;
int **p2 = &p1; // Invalid (int **) = (const int **)
問題是 const int * 是否可以轉型為 int **
這個問題比較單純.
因為 p1 不只可以指向 n 也可以指向另一個 const 變數, 例如:
const int a = 3;
p1 = &a; // 我們讓 p1 改成指向 a (合法)
**p2 = 10; // 會把 a 改成 10, 這違反 a 是 const 的性質是不應該發生的的
--
我之前有寫過 const 相關的 blog:
http://goo.gl/C58Lv6 (參考第 36 行)
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.29.148
※ 編輯: Feis 來自: 140.112.29.148 (01/21 17:52)
推
01/21 18:00, , 1F
01/21 18:00, 1F
→
01/21 18:01, , 2F
01/21 18:01, 2F
推
01/21 18:42, , 3F
01/21 18:42, 3F
→
01/21 18:43, , 4F
01/21 18:43, 4F
→
01/21 18:44, , 5F
01/21 18:44, 5F
→
01/21 18:45, , 6F
01/21 18:45, 6F
→
01/21 18:45, , 7F
01/21 18:45, 7F
→
01/21 18:46, , 8F
01/21 18:46, 8F
→
01/21 18:46, , 9F
01/21 18:46, 9F
推
01/22 15:44, , 10F
01/22 15:44, 10F
→
02/07 17:56, , 11F
02/07 17:56, 11F
討論串 (同標題文章)
完整討論串 (本文為第 2 之 2 篇):