Я очень новичок в C/C++, поэтому я знаю, что этот вопрос, вероятно, тривиальный, но я не понимаю, как действовать дальше. Я выделил блоки памяти, которые по 512 байт каждые, как так (сектор является структурой размера 512 байт): char* block = (char *) malloc (sizeof(Sector));
Объявление нескольких структур и их наложение на уже выделенную память
У меня есть другая структура, которая является 128 байтами:
typedef struct inode {
int fileSize;
int fileType;
int* blockPointer[30];
} inodeFile;
Я хочу сделать наложение этой структуры на блок. Мне нужно, чтобы каждый блок содержал 4 inode-структуры, но каждая структура может не иметь никаких связанных с ней значений до тех пор, пока в программе не появится. Так, например:
((*inodeFile) block)->fileSize = 10;
Если я правильно понять, это установка первые 4 байта указателя блока к FileSize. Я буду продолжать делать это для каждого поля структуры.
Вопрос в том, как я могу это сделать для 4 разных инодов? И поскольку существует 4 разных inodes, как я могу вернуть значения каждого поля для разных структур? Кажется, просто сказать, что block-> fileSize не будет работать, потому что может быть до четырех разных размеров файлов.
Почему не '(((* inodeFile) блок) +1) -> FileSize = 10;' (кроме неизбежно сталкиваясь с жесткими проблемами наложения спектров с этой схемой) – IdeaHat
Вы рассмотрели достоинства 'ЬурейеГо объединение InodeSector {секторный сектор; inodeFile inodes [4]; } InodeSector; '(с вашей предпочтительной последовательной схемой именования/верблюда/подчеркнутой именования)? На мой взгляд, 'Сектор' и' inodeFile' являются непоследовательными, но согласованность выгодна. С помощью 'union' вы можете получить доступ к данным как к сектору, так и к массиву с 4' inodeFile'. Возможно, вам все еще нужно знать о строгом псевдониме. –
Попробуйте '((inodeFile *) block) [0] .fileSize = 10;' (звездочка на другой стороне имени типа и используя '[]' для разыменования, чтобы вы могли легко получить доступ к 2-м, 3-му и 4-му изменение индекса на 1, 2 или 3). – Dmitri