У меня есть эта часть кода в c:
int q = 10;
int s = 5;
int a[3];
printf("Address of a: %d\n", (int)a);
printf("Address of a[1]: %d\n", (int)&a[1]);
printf("Address of a[2]: %d\n", (int)&a[2]);
printf("Address of q: %d\n", (int)&q);
printf("Address of s: %d\n", (int)&s);
Вывод:
Address of a: 2293584
Address of a[1]: 2293588
Address of a[2]: 2293592
Address of q: 2293612
Address of s: 2293608
Итак, я вижу, что от a
до a[2]
адреса памяти увеличиваются на 4 байта каждый.
Но от q
до s
адреса памяти уменьшаются на 4 байта.
Интересно 2 вещи:
- Увеличивается ли стек вверх или вниз? (В этом случае он выглядит как для меня)
- Что происходит между адресами памяти
a[2]
иq
? Почему там большая разница в памяти? (20 байтов).
Примечание. Это не вопрос домашней работы. Мне интересно, как работает стек. Спасибо за любую помощь.