Чтобы расширить Ответ Романа Чепляка , квалификаторы типов всегда могут быть добавлены к типам указателей, но не удалены. Это означает, что функция, которая принимает параметр const char *
, на самом деле говорит, что может принимать либо char *
, либо a const char *
(что фактически означает, что она обещает не изменять содержимое строки) .
Аналогично, функция, имеющая параметр volatile char *
, может принимать либо char *
, либо volatile char *
в качестве фактического аргумента, а функция, которая принимает параметр const volatile char *
, может принимать любой из char *
, const char *
, volatile char *
или const volatile char *
.