к определенному типу для инкремента.
Есть вот такой код:
int a = 300;
void * b = &a;
// Вот эта конструкция успешно инкрементит указатель на 1 байт.
++(*((char **)(&b)));
Я не совсем понимаю смысл этого выражения. Может кто-то подробнее рассказать что происходит в нем? (интересует в академических целях, ни о каком применении в реальных задачах речи не идёт.)
каст б а p2p to char потом deref и инкримент
А для чего именно через p2p делают?
*pointer to pointer to char
Да я понял что это указатель на указатель, но почему простое приведение указателя к типу char* не срабатывает, компилятор ругается: lvalue required.
++((char*(&b))); а если так?
Так взяли адрес самого указателя
++((char*)(b))? Не
Результат каста это значение. А инкремент требует объект. Результат дереференса это объект. Таким образом делая дереференс после каста, мы снова получаем объект но уже другого типа.
Интересно, не знаком с понятием объекта в си.
Обсуждают сегодня