簡體   English   中英

指向const int的指針的const指針轉換為指向int的指針的const指針

[英]Const pointer to pointer to const int casts to const pointer to pointer to int

這是代碼:

int *const *a = nullptr;
int const *const *b = nullptr;

b = a;

為什么這段代碼編譯運行沒有錯誤? 不是const指針意味着我們無法改變它嗎?

實際上我的想法有一個錯誤:我認為bconst ,因此無法分配。 但是b是可修改的(盡管它指的是const ),因此可以分配給b

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

b是指向const int的const指針的指針。 允許將其指定為指向(可寫)int的const指針,因為如果要取消引用*b ,那么您將能夠通讀它。

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

當你考慮時,它會變得更有趣:

int const **c;
int **d;

練習: a,b,c&d之間允許哪些作業? 為什么?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM