Указатели подсчитывают байты, поэтому для указания на следующий байт вам необходимо изменить значение указателя на 1. Однако арифметика указателя подсчитывает объекты, на которые указывает указатель, а приращение указателя увеличивает его значение на размер его заостренный тип. Если вы хотите указать на байты, используйте указатель char
, поскольку char
имеет размер 1 по определению, а арифметика указателя на указателях char
позволяет указывать на байты:
T * p = get_pointer();
char * cp = reinterpret_cast<char*>(p);
cp += 16;
Приведение указателей к типам символов и из них не является указанием типа и явно разрешено стандартом. Однако вы не должны использовать результирующий указатель для доступа к объектам, которые на самом деле не находятся по этому адресу.