Я новичок в C, но имею достаточно хорошее представление о компиляторах и о том, как работают фреймы кадров и тому подобное. Я пытаюсь понять, как массивы C выделяются в стеке, а также указатели. Например, возьмите код:C массивы, выделяющие в стек дополнительный указатель
int a = 101;
int b[5] = {1, 2, 3, 4, 5};
Мне сказали, что b является указателем здесь. например '* (b + 1) = 3;' совпадает с «b [2] = 3 '. Означает ли это, что в кадре стека здесь есть целое число для a, указатель для b и массив (из 5 * sizeof (int) байтов), на который указывает b (я назвал эту ситуацию A) или просто целым числом для a и массива для b (я назвал эту ситуацию B).
Я создал картинку, чтобы сделать это немного более ясно:
Если ситуация А правда, почему разработчики C выбрали для реализации массивов так по-разному к переменным? Разве это не означает, что массив должен постоянно иметь дополнительный поиск памяти для указателя, чтобы получить его адрес?
для начала, '* (b + 1) = 2;' (not 3) – artm
C не применяет конкретную схему размещения объектов. Также не требуется куча, ни стопка. И вопрос слишком широк. Также: массивы ** не ** указатели!Тот, кто сказал вам, должен выучить язык, прежде чем учить его. – Olaf
Массивы * распад * указателям. Они сами не являются указателями. – StoryTeller