Вызов функции для цикла и статической переменной - PullRequest
0 голосов
/ 09 февраля 2019
#include <stdio.h>  

int main() {

    int r() {
        static int num = 7;
        return num--;
    }

    for(r(); r(); r())
        printf("%d",r());

    return 0;
}

Вывод 52. Насколько мне известно, вывод, насколько я знаю, этот вопрос, который я узнал о статической энергии, полностью неверен.

Ответы [ 2 ]

0 голосов
/ 09 февраля 2019

При первом запуске r() будет возвращено 7, в следующий раз - 6 и т. Д.
Цикл for остановится, когда значение r() будет равно 0.
Поток кода:

r() // 7 [1st expression in the for loop]
if (!r()) stop for loop; // 6, so goes into for loop [2nd expression in the for loop]
print (r()) // 5
r() // 4 [3rd expression in the for loop]
if (!r()) stop for loop // 3, continues again
print (r()) // 2
r() // 1 [3rd expression in the for loop]
if (!r()) stop for loop // 0 so exits the for loop

Сначала печатается 5, затем 2 (без перевода строки), следовательно, выводится 52.

0 голосов
/ 09 февраля 2019
#include <stdio.h>

int r(){
  static int num = 7;
  return num--;
}

int main()
{
  for(r();r();r())
    printf("%d",r());

 return 0;
}

статическая переменная похожа на глобальную переменную (я имею в виду не в стеке), но видима только для функции r

результат равен 52, потому что он печатает 5 затем2

  • начальное значение num равно 7
  • для вызова в первый раз r (initчасть для ), поэтому num уменьшается до 6, а r возвращает 7 даром,
  • , тест выполняется и num снова уменьшено до 5, и поскольку 6 является возвращаемым значением и не равно 0, для продолжаются,
  • теперь print снова выполняетсявызов, уменьшающийся на num до 4 с выводом результата 5
  • r вызываемый (модифицированная часть для ) с уменьшением num в 2 и возврат 3 даром
  • снова тест, уменьшающий num до 2 и возвращающий 3! = 0 цикл продолжается
  • снова print снова с вызовомуменьшение num до 1 с выводом результата 2
  • r называется (модифицированная часть для ) уменьшение num до 0 и возвращая 1 ни за что
  • тест выполняется, и num снова уменьшается до -1, и потому что 0 возвращается r цикл останавливается
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...