На языке 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»?
Допустим, функция, аннулируются весело (Int А []) {а [0] = 1;}. int main() {int a [5] = {0}; fun (&a);}Теперь, чтобы изменить [0], забава должна знать адрес a, и она находится в области стека. Когда называется fun, она создается в верхней части области стека основной функции, так что как весело доступ к [0] прямо мой вопрос – AV94
@anil прежде всего, вы должны называть его как 'fun (a);', а затем, вы передаете массив, правильно? Он будет распадаться на указатель на первый elemnt массива, поэтому у вас есть адрес. Что, по-видимому, проблема? –
теперь выглядит ясным, когда я передаю аргумент «a», функция, созданная в стеке, будет содержать указатель на «a» остаток в main – AV94