У меня просто быстрый вопрос относительно того, как массив символов работает в отношении пула памяти и выделения для него указателей других типов переменных. Я работаю над назначением, которое использует массив символов для пула памяти, и мне нужно иметь возможность выделять для него указатели, и я прочитал некоторую информацию по этому вопросу, но не совсем понимаю одну часть, которая заключается в том, как работает фактическое распределение такие как:
const int poolSize = 60000;
char pool[poolSize];
void* allocate(int aSize)
{
//.....
return ((void*) 0);
}
long* pointer;
pointer = (long *) allocate(sizeof(long));
*pointer = 0xDEEDEEEF;
Я просто не совсем понимаю, как это работает, так как char равен 1 байту, а long должен быть 4, и так как же работает что-то подобное, когда мне нужно выделить 4 места в массиве для одной переменной указателя long? Также не стесняйтесь приводить примеры и объяснения, но, пожалуйста, не отказывайтесь от того, как должна работать вся программа, так как я хотел бы понять это сам, как только пойму, как именно работает эта часть. Спасибо
Распределение памяти не зависит от типа, т.е. является ли оно длинным / char.etc. Но дело в том, что оно количественно определяется в «байтах». И char — единственный тип данных, который занимает одну байтовую память.
Это в вашей программе, как вы относитесь к выделенной памяти. Для бывших
char s[4]={0,0,0,'A'};
int *p = (int*)s; //treating those 4 bytes as int
printf("%d",*p); //will print 65
Я предлагаю вам посмотреть первые 4-5 лекций по парадигме программирования Стэн-Форда. Распределение памяти объясняется невероятно хорошо в этих лекциях. Вы также можете обратиться к Главе 8 языка программирования Си — от Дени Ритчи
Других решений пока нет …