C мог бы использовать те же правила, что и C ++; однако комитет по стандартизации C не решил сделать это.
тель на неконстантные данные может быть неявно преобразован в указатель на константные данные того же типа:
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
квалификатор "отбрасывать квалификаторы во вложенных типах указателей"?