指標解引用:為什麼禁止轉換為「指向const 的指標」
在C 中,允許轉換指標-to-non- const 到指向const 的指標。但是,不允許從指標到指標到非常量到指標到指標到常數的轉換。這就提出了一個問題:為什麼?
要理解此限制背後的原因,我們必須考慮指標解除引用。當取消引用指標到指標時,它表示存取最內層指標指向的值。例如,考慮以下程式碼:
int i = 10; int *ptr = &i; int **pptr = &ptr;
這裡,**pptr 相當於 *ptr,它只是值 i。
但是,如果我們允許轉換為指標到指標到常數,類似的取消引用操作將產生一個常數值。這會引入不一致,破壞 const 指標的不變性。例如:
char *s1 = 0; const char *s2 = s1; // OK... char *a[MAX]; // aka char ** const char **ps = a; // Error!
這裡,s2 是一個 const 指針,表示它不能指向其他任何東西。但是,如果允許 ps,我們可能會取消引用它以獲取 a,然後修改 a 的值,從而有效地更改 s2 指向的值,這是禁止的。
因此,為了保持 const 的完整性指針,該語言禁止從指針到指針到非常量到指針到指針到常量的轉換。這確保了 const 指標的不變性得以保留,從而防止對常量值的無意修改。
以上是為什麼 C 中禁止將指標到指標到非常量轉換為指標到指標到常數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!