2016-02-16 3 views
0

На языке C я знаю, что когда переменная динамически инициализируется с помощью malloc, она сохраняется в области кучи. Но где выделена память, когда объявляется объявление типа ниже, а переменные инициализируются позже.где хранятся переменные, которые инициализируются в основной функции в c?

int a[26];

или

int a[n]; //n is a variable and each element in array a is later initialized through a for loop. 

Мое начальное понимание того, что, как и в Java, здесь также все переменные, объявленные в основной функции, сохраняются в области стека. Мое сомнение есть. Скажем, есть функция, которая берет адрес массива «a» и меняет его содержимое. Чтобы изменить содержимое «a», он должен иметь доступ к адресу каждого элемента в «a». Поскольку сама функция выполняется в пространстве стека в верхней части главной функции, она не может напрямую обращаться к массиву «a». Итак, мое сомнение в том, где выделена память массива «a»?

ответ

2

Обычно int a[n]; называется массивом переменной длины, а распределение хранилища зависит от компилятора.

Например, gcc allocates VLAs in stack memory.

FWIW, локальные переменные также обычно хранятся в памяти стека (минус оптимизация компилятора, если таковая имеется).

+0

Допустим, функция, аннулируются весело (Int А []) {а [0] = 1;}. int main() {int a [5] = {0}; fun (&a);}Теперь, чтобы изменить [0], забава должна знать адрес a, и она находится в области стека. Когда называется fun, она создается в верхней части области стека основной функции, так что как весело доступ к [0] прямо мой вопрос – AV94

+0

@anil прежде всего, вы должны называть его как 'fun (a);', а затем, вы передаете массив, правильно? Он будет распадаться на указатель на первый elemnt массива, поэтому у вас есть адрес. Что, по-видимому, проблема? –

+1

теперь выглядит ясным, когда я передаю аргумент «a», функция, созданная в стеке, будет содержать указатель на «a» остаток в main – AV94

0

массивы могут быть практически любой длины, их можно использовать для хранения тысяч или даже миллионов объектов, но размер должен определяться при создании массива. Каждому элементу массива обращается индекс, который является просто числом, которое указывает позицию или слот, где объект хранится в массиве.

размер массива хранится в компьютерной физической памяти

Смежные вопросы