Я делаю проект, в котором я столкнулся с этой ситуацией:
typedef unsigned char Page[16384];
unsigned char Memory[16384*64]={...values...};
void foo(Page* page);
Теперь, как вы видите, память состоит из «страниц», теперь я хотел бы передать страницу в функцию, ноСтраница должна быть указателем на значения памяти (поэтому индексы страницы должны быть указателями на значения памяти).Что я имею в виду, должно быть понятно, наблюдая за этим:
Page tmp;
Memory[16400]=50;
tmp=(unsigned char[16384])&Memory[16384];//This is not possible but is what I would like to do
printf("Value should be 50: %d\n",tmp[15]);
Любое предложение?
Обновление 1: Мне нужно, чтобы память была большим массивом, а не массивом массивов (хотя на самом деле они одинаковые, если я не ошибаюсь), это требование проекта (для университета).
Обновление 2: Obviusly - это пример кода, я использовал макрос для 16384(а также для 16384 * 64), размеры не могут измениться.
Обновление 3: Я бы хотел сохранить страницу как беззнаковый символ [16384] , потому что яхотел бы использовать его для передачи значений, которые должны быть сохранены (чтобы они нигде не хранились), но я думаю, что это невозможно, поэтому я буду следовать Тайлеру МакГенри совету
Обновление 4: Как заявил Тайлер МакГенри , Обновление 3 не имеет смысла, поэтому я объясняю, что я имею в виду: я хотел бы использовать Page для передачи значений в функции, которые должны хранитьэти значения в «файл подкачки» (это симулятор системной памяти), так что на самом деле есть некоторые случаи, когдаСтраница не будет ссылкой на что-либо (просто массив значений), но проблема в том, что страница должна быть указателем на часть памяти ИЛИ просто на простой массив из 16384 байтов, поэтому1 тип для 2 вещей - проблема.
Примером может быть такой:
typedef char Page[16384];
void WritePageToSwapFile(char* swapfilePath,Page* page);
...somewhere in a function...
Page myNewPage;
myNewPage[5]=23;
WritePageToSwapFile("swapfile",&myNewPage);
...somewhere else, in another function...
Page tmp;
Memory[16400]=50;
tmp=(unsigned char[16384])&Memory[16384];//This is not possible but is what I would like to do
WritePageToSwapFile("swapfile",&tmp);
Я не думаю, что я могу сделать обе вещи с одним типом