Арифметика на литой указателе
Приведенный ниже код печатает переданную строку в виде шестнадцатеричных значений, я использую ее для проверки строк, содержащих непечатаемые символы, перед передачей в последовательной сети. Я понимаю код, но просто не уверен, почему, если мы предполагаем, что int
в моей системе 4 байта, указатель не перемещается на четыре байта каждый раз (unsigned int) *s++
вычисляется циклом. Может кто-нибудь объяснить, почему это так? Есть ли какая-то операторная точность, такая как общая арифметика?
static void printhexstring(const char *s) {
while(*s) {
printf("<%02X> ", (unsigned int) *s++);
}
printf("\n");
}
1 ответ
printf("<%02X> ", (unsigned int) *s++);
Вы увеличиваете указатель s
который имеет тип char
и когда это увеличение сделано указатель s
перемещается на один байт, а не на 4 байта. Приведение не влияет на арифметику указателей здесь.
%X
преобразует беззнаковое целое в беззнаковое гекса и отображает значение так, что у вас есть приведение unsigned int