нее значение с экрана
scanf(“%d”, &n);
Далее создаю массив длинной n которую я только что отсканировал
Int data[n]
ну и дальше его заполняю значениями
все работает, но имеются вопросики.
1. Какое место под массив мне выделит компиллятор?
2. Смогу ли я сэкономить байты памяти таким образом(чем например когда я задаю массив заведомо больше)
то есть по сути хочу реализовать программу с динамической длинной массива не используя динамическую память
Я предполагаю что программа работает сверху вниз и выделит под массив столько место сколько я укажу в сканф для переменной n
int main() {
int n;
int scn = scanf("%d", &n)
int data[n];
input2(data, &n);
Это плохой подход, память для этого массива выделяется на стеке, что несёт побочные эффекты
Компилятор не должен нисколько выделить, выделение происходит в рантайме, компилятор не может контролировать стек
У тебя стек около 1МБ на компах и по 4КБ на микроконтроллерах
Это в си называется VLA (Variable Length Array), прочитайте в интернете детали про эту фичу и почему она не рекомендуется. Если вкратце - с ней слишком легко убить стек.
+ Вроде же VLA нету в С++?
Обсуждают сегодня