Почему я должен использовать a для char *, а не int *?
Чтобы прояснить для читателей вопроса, вы не предполагается использовать код, как это вообще. Но предположим, что вы конкурируете в ioccc (есть ли вариант C++ этого соревнования?), И в этом случае это может быть именно то, что вы должны делать.
Итак, чтобы ответить на вопрос, это потому, что арифметика указателя масштабируется по размеру заостренного объекта. Если вы использовали int*
, тогда b
будет масштабироваться sizeof(int)
. Поскольку вы не хотите масштабировать либо операнд сложения, вы масштабируете с 1 (мультипликативный идентификатор), который происходит, когда остроконечный тип имеет размер 1, который по определению char
имеет.
P.S. Программа плохо сформирована и может не скомпилироваться на стандартных совместимых компиляторах.
Этот код не компилируется на GCC и Clang. – NathanOliver
Откуда у вас этот код? – user463035818
Лучшее в этом коде, которое вы можете сделать - выбросить его в мусор и больше не упоминать об этом. – Starl1ght