Мне было интересно, как массивы работают в c. Я получаю гипотезу, и я хотел бы знать, прав я или нет.
Мы знаем, что массивы представляют собой последовательность соседних ячеек памяти (ящиков), где каждый ящик имеет размер того типа, который он запасает (т.е. если INTs one box имеет размер = sizeof (int), а массив из 3 INTs принимает память соседних мест 3 sizeof (int))
Теперь мы также знаем, что мы можем динамически выделять память для массива определенного типа (malloc в C, new в С++).
что заставляет меня задаться вопросом, является ли тот факт, что массив имеет для начала адрес первого поля массива и первое значение (значение в более позднем поле) при вызове с помощью скобки [0] - это массив [ 0] == * (array + 0) == * array (независимо от того, был ли массив объявлен "type * array" или "type array []" или "type array [size]" ) и "array", называемый таким образом, указатель или массив ( "type * array" или "type array []" или "type array [size]" ) - это адрес первого поля.
Я в конечном итоге думаю, и я хотел бы подтвердить это: массивы, когда даже объявленные квадратными скобками ([]), фактически представляют собой последовательность из n указателей, каждая из которых содержит (имеющую значение не как адрес) адрес блока памяти Bi, содержащего фактическое значение + эти ячейки памяти (B0,..., Bn, каждый из которых содержит фактические значения). так что когда и когда объявляется "int array [5]", программа фактически выделяет 5 соседних ячеек индексов P0, P1,.., P4 и 5 int, размещенных по всей памяти компьютера B0, B1,..., B4, где значение Pi является адресом Bi
Я прав или неправильно!!?? Спасибо!