非 const データへのポインターは、同じ型の const データへのポインターに暗黙的に変換できます。
int *x = NULL;
int const *y = x;
追加のインダイレクションに一致する const 修飾子を追加すると、論理的には同じように機能するはずです。
int * *x = NULL;
int *const *y = x; /* okay */
int const *const *z = y; /* warning */
ただし、フラグを指定して GCC または Clang でこれをコンパイルすると-Wall
、次の警告が表示されます。
test.c:4:23: warning: initializing 'int const *const *' with an expression of type
'int *const *' discards qualifiers in nested pointer types
int const *const *z = y; /* warning */
^ ~
const
追加の修飾子を追加すると、「ネストされたポインター型の修飾子が破棄される」のはなぜですか?