2015-06-24 243 views

回答

3

其實在我的想法中有一個錯誤:我認爲bconst,所以無法分配到。但b是可修改的(雖然它指向的是const),所以可以將其分配給b

換句話說,int const *const *b不是const指針,但實際上是指向const指針的指針,所以可以更改它。

+0

@TobySpeight這不是一個答案嗎? OP不明白髮生了什麼事情(因爲它似乎違反了const的正確性)。這回答了這個問題(沒有違反const正確性)。 – Yakk

+0

@Yakk我應該更仔細地閱讀答案。你是對的。我認爲混淆是關於類型兼容性的;我並沒有想到混淆是用'int * const * const'。我已經撤回了我的批評。 –

0

b是一個指向const int指針的指針。可以將它指定爲指向(可寫)int的常量指針,因爲如果您要解除引用*b,那麼您將能夠通讀它。

另一方面,a=b將無法​​編譯,因爲這將使指向(可寫)int指向const int,從而能夠寫入你不應該的東西。類型系統阻止了這一點。

int const **c; 
int **d; 

練習:什麼分配是一個B之間,允許,C & d

,當你考慮它也變得更有趣嗎?爲什麼?

+0

'a = a' - 是** ok **,將指針指向另一個指針,它們都指向相同的類型。 'a = b' - _fail_(你已經解釋了) 'a = c' - _fail_。我們還創建了一個指向int int的可寫int指針。 'a = d'; - 似乎**好**。我們把它分配給指向'int *'的最後一個指針後面的所有內容,這似乎是正確的。 (你已經描述過) 'b = b' - ** ok **。一種類型的指針指向相同類型的指針。 'b = c' - ** ok **。一個const類型指向另一個可寫類型的指針。我們仍然可以閱讀。 'b = d' - ** ok **。與上面的一樣。 繼續另一條評論。 – Utikeev

+0

'c = a' - _fail_。我們賦值'c'來指向int的指針,所以我們可以改變const。壞。 'c = b' - _fail_。我們賦值'c'指向非const指針,它可以被改變(?不確定這個)。 'c = c' - ** ok **。一種類型的指針指向相同類型的指針。 'c = d' - _fail_(?)。絕對不確定這一點。它是否與通過'd'更改'int const'有關? 'd = a' - _fail_。我們可以改變指針,這是指向和const。 'd = b' - _fail_。和上面的例子一樣。 'd = c' - _fail_(?)。理解上的問題與'c = d'相同。不知道。 'd = d' - ** ok **。很明顯, – Utikeev

+0

這其實很容易搞砸這件事,我有很多問題試圖理解指針,並沒有看到任何獨特的規則,可以幫助排序一切:( – Utikeev

相關問題