возвращаемое значение для статической переменной

#c #variables #static

#c #переменные #статический

Вопрос:

Я пытаюсь использовать статическую переменную в качестве счетчика для количества раз, когда вызывалась функция. По сути, я заставляю функцию A вызывать функцию B несколько раз, и я хочу, чтобы функция B возвращала это значение функции A, чтобы его можно было отобразить. Пример моего тестового кода приведен ниже (здесь main — это функция A, а showStat — функция B). На данный момент результатом является 012340; желаемый результат — 012344. Заранее спасибо.

 int showStat()
{

    static int statNum;
    cout<<statNum; //function check
    statNum  ;
    return statNum;
}


int main()
{
    int statNum;

    for( int i = 0; i < 5 ; i  )
    {
    showStat(); 
    }
    cout<<statNum;

    return 0;
}
  

Комментарии:

1. Два символа statNum не связаны между собой (и ваш код в любом случае демонстрирует неопределенное поведение). Чтобы перейти к желаемому результату, измените вызов showStat(); на statNum = showStat() - 1;

2. Или измените statNum на глобальную статическую переменную в классе и удалите все другие инициализации

Ответ №1:

В основном, измените

 showStat();
  

Для

 statNum = showStat();
  

У вас есть две переменные, называемые statNum. По-видимому, подсчет происходит в статической переменной внутри функции showStat(). Но в main() без чтения возвращаемого значения showStat() вы просто печатаете неинициализированную локальную переменную, которой компилятор случайно присвоил начальное значение 0.

Комментарии:

1. Это приведет к следующему результату: 012345 .

2. @IInspectable его описание проблемы было самопротиворечивым. Да, код выведет 5 (отличается от 4, о которых он упоминал); но в то же время он сказал «подсчитайте, сколько раз вызывается функция». Его цикл вызывает это пять раз.

3. Спасибо за помощь! Я понимаю, что у меня должен был быть statNum до cout<<statNum. Итак, сделав это и рекомендованное выше изменение, я получил именно то, к чему стремился. Еще раз спасибо!