В языке C указатели не могут быть инициализированы целочисленными значениями, за исключением единственного выражения интегральной константы, которое оценивается как целое ноль. 17
не удовлетворяет этому требованию.
Ваш код неверен. Он ничего не «печатает». Вопрос не имеет никакого смысла вообще. Любые попытки проанализировать этот вопрос с точки зрения арифметики указателей являются нелепыми и просто бесполезной тратой времени.
6.5.16.1 Простое назначение
Ограничения
Должно быть одно из следующего: 93)
- левый операнд имеет квалифицированный или неквалифицированный арифметический тип, а правый имеет
арифметический тип;
- левый операнд имеет квалифицированную или неквалифицированную версию структуры или типа объединения
совместим с типом право;
- оба операнда являются указателями на квалифицированные или неквалифицированные версии совместимых типов,
и тип, на который указывает слева, имеет все квалификаторы типа, на который указывает
право;
- один операнд является указателем на объект или неполный тип, а другой - указателем на
квалифицированная или неквалифицированная версия void, а тип, указанный слева, имеет все
квалификаторы типа, указанного справа;
- левый операнд является указателем, а правый - константой нулевого указателя; или
- левый операнд имеет тип _Bool, а правый - указатель.
93) Асимметричный вид этих ограничений по отношению к классификаторам типов обусловлен преобразованием
(определено в 6.3.2.1), который изменяет lvalues на «значение выражения», которое удаляет любой тип
классификаторы из категории типов выражения.