回覆列表
  • 1 # 使用者5048867028808

    你可以在期望一個const T型別指標的地方使用指向T型別的指標。

    比如,下面的程式碼編譯是可以透過的。

    但是請注意,這一規則,或者說一個顯式的例外,允許指標型別中的輕微不匹配,是不允許遞迴地應用,

    只可以在最頂層(top level)。所以對於const char**,它是一個指向常量的指標的指標,不可以應用上面這一規則。

    不允許將一個char**型別的值,賦值給一個const char**型別的指標,可以說原因有些模糊。

    const限定符存在時,編譯器將幫助您保證常量不被修改。這就是為什麼你可以將一個char*型別賦值給const char*型別,但是反過來就不行。

    假定你將執行下面一系列的賦值操作:

    在第三行,將一個char**型別賦值給const char**型別(編譯器會報錯)。

    在第四行,將一個const char*型別(&c)賦值給const char* (*p2)型別,這是合法的.

    在第五行,修改一個char*型別的指標,這理應合法的。但是p1指向c,而c是一個const char型別。你會發現在第四行*p2實際上就是p1,因為透過第三行的操作,p2指向了p1

    到這裡你會明白,為什麼第三行的賦值操作是非法的。如果第三行操作合法,將會導致第五行的結論。

    將char**型別的賦值給const char**型別,不會導致直接的危險。但是正如上面的推導,它會產生一種情形-p2最終所指向的值不能被修改,這一宣告不滿足。

    在C語言中,如果你必須將限定符不相容的指標賦值給非第一級間接使用,則必須使用顯式強制型別轉換。然而,需要做這樣的型別強制轉換可能意味這背後隱藏著更深的問題,只是這個強制型別轉換並不能解決這個問題。

  • 中秋節和大豐收的關聯?
  • 誰有好的新春對聯,拿來分享一下啊?