Я запутался, как массивы хранятся в исполняемом файле, когда они находятся внутри функций и т. П.
С кодом, приведенным ниже, я считаю, что пространство для значения трех целочисленных значений сохраняется в исполняемый файл.
#include <stdlib.h>
int main() {
int arr[] = {rand(), rand(), rand()};
}
Я думал о массиве в функции, каждый вызов будет использовать то же пространство, что и другие вызовы, для хранения своего массива. Но потом я подумал, что рекурсивные вызовы перезапишут массивы друг друга. Я не понимаю, как пространство для них остается в стороне, особенно с рекурсией и неизвестным количеством звонков. Я попытался сделать пример:
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
bool myfunc(unsigned val) {
int arr[] = {rand() % 10, rand() % 10};
if (val == 0)
return true;
myfunc(val - 1);
printf("%d %d\n", arr[0], arr[1]);
return false;
}
int main() {
myfunc(rand() % 50);
}
Я получаю, что элементы массивов хранятся один за другим. Но как для них есть место (в стеке?), Когда неизвестно, сколько их будет?