Рекурсивные вызовы функции - почему передаваемый ей адрес параметра уменьшается с каждым вызовом? - PullRequest
9 голосов
/ 22 апреля 2019

Рассмотрим следующий код:

#include <iostream>
using namespace std;
void test_func(int address) {
    cout<<&address<<" ";
    if(address < 0x7FFBEE26) {
        test_func(address);
    }
}
int main()
{
    test_func(512);
    cout<<"Hello";
    return 0;
}

Привет от main () определенно не достигнут, поскольку рекурсивные вызовы test_func никогда не заканчиваются.

Однако из того, что я вижу в cout, присутствующем в test_func - печатаемые адреса все меньше и меньше с каждой итерацией. Почему это происходит?

1 Ответ

21 голосов
/ 22 апреля 2019

Вероятно, address помещается в стек, и на вашей платформе стек растет в памяти вниз.См. этот вопрос о направлении роста стека для получения дополнительной информации.

...