[英]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指針意味着我們無法改變它嗎?
實際上我的想法有一個錯誤:我認為b
是const
,因此無法分配。 但是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.