typedef struct __anystruct
{
//...
char Buffer[1]; // Разноразмерный массив
}ANYSTRUCT, *LPANYSTRUCT;
char Buffer[1]?
Читая MSDN, я тут стал часто замечать, такие вот определения полей струкутр:
Код:
В чем здесь прикол? Зачем так делать? Почему не написать char* Buffer? Да и в чем преимущество такого определения? Кроме того, тут получится, что под массив уже будет выделен 1 байт памяти.
Когда же ты создаешь не указателем, ты создаешь массив в стеке и при уничтожении этого стека массив так же будет уничтожен. Что облегчает жизнь, и тебе не надо следить за тем, удалил ли ты этот массив.
Цитата: Oxaid
В чем здесь прикол? Зачем так делать? Почему не написать char* Buffer? Да и в чем преимущество такого определения? Кроме того, тут получится, что под массив уже будет выделен 1 байт памяти.
Т.о. определяются структуры переменной длины.
Далее в коде, к примеру, можно написать:
Код:
LPANYSTRUCT p = (LPANYSTRUCT)new unsigned char(sizeof (ANYSTRUCT) + 8*sizeof(char));
и получить т.о. структуру с Buffer под 9 элементов.
Отличие от char* Buffer в том, что здесь вся структура располагается в памяти линейно.