Поместить первые два байта выделенного блока памяти в 0 легко. Есть много способов сделать это, например:
((char*)block)[0] = 0;
((char*)block)[1] = 0;
Теперь, способ, которым задают вопрос, показывает некоторое недопонимание.
Вы можете поместить что-нибудь в первые два байта вашего выделенного блока, это ничего не изменит для доступа к следующим байтам. Единственное отличие состоит в том, что оператор манипуляции со строками C использует в качестве соглашения, что строки заканчиваются байтом 0. Затем, если вы сделаете что-то вроде strcpy((char*)block, target)
, оно немедленно прекратит копирование, если первый байт равен нулю. Но вы все равно можете сделать strcpy((char*)block+2, target)
.
Теперь, если вы хотите сохранить указатель в начале блока (и обычно это не 2 байта).
Вы можете сделать то же самое, что и выше, но используя void * вместо char.
((void**)block)[0] = your_pointer;
Вы получаете доступ к остальной части блока, как хотите, просто получите его адрес и продолжайте. Вы можете сделать это, например, с помощью.
void * pointer_to_rest = &((void**)block)[1];
PS: я не рекомендую такие игры указателя. Они очень подвержены ошибкам. Ваш лучший ход, вероятно, будет следовать методу struct, предложенному @ Anon.