2013-11-19 2 views
1

Я не могу понять, вывод этой программы-Классы хранения: Понимание Static

int main() 
{ 
    static int i=5; 
    if(--i) { 
     main(); 
     printf("%d ",i); 
    } 
} 

Выход 0 0 0 0

Мои сомнения, почему обыкновение статические быть инициализированы в первом вызове на главную? Выход, если я предполагаю, что статический файл инициализируется при первом вызове 5, а затем получает общий доступ, должен быть 4 3 2 1

Спасибо!

+3

«* Чтобы понять рекурсию, вам нужно понять рекурсию ... *« – alk

+0

»* Мое сомнение в том, почему не статично инициализироваться при первом вызове main * "это будет. Как вы думаете, откуда взялись '' 5-1'''''. – alk

+2

Попробуйте изменить порядок вызовов на 'main' и' printf', проверьте результат и подумайте об этом. – qrdl

ответ

1

Вызов main() называется рекурсивно 4 раза перед вызовом оператора printf(). К моменту первого вызова printf(), --i был назван рекурсивно 4 раза. Поскольку i является статическим, его значение равно 0 в этой точке, и это значение, которое печатается.

0

Если вы не выбираете i быть static, программа застрянет в бесконечных вызовов main(), так как в каждом вызове, будет новый i со значением 5. Когда main() вызывается снова, printf() заявление нажатие на стек и позже, когда i становится 0, все printfs печатают значение i, то есть 0.

Смежные вопросы