Вызов функции для добавления одного к номеру в C - PullRequest
0 голосов
/ 06 апреля 2020

Вот что я пытаюсь сделать:

-Иметь переменную call_count, целое число, инициализированное в ноль

-Колл функции f1 и f2 несколько раз

- Выведите итоговое значение call_count

-Два функции, f1 и f2, которые при вызове вызывают call_count к увеличению на 1

Это то, что я мог сделать до сих пор, но когда я скомпилирую и запустите это , он все еще выводит 0. Что я делаю не так? Спасибо за помощь.

Редактирование вопроса: Как я могу использовать указатель здесь, чтобы выполнить sh это?

#include <stdio.h>

void f1(int call_count){ call_count = call_count + 1;}
void f2(int call_count){ call_count = call_count + 1;}

int main(){

    int call_count = 0;
    f1(call_count);
    f2(call_count);

    printf("%d",call_count);
    }

Ответы [ 2 ]

1 голос
/ 06 апреля 2020

Поскольку вы потеряли значение в памяти, у вас есть два решения: 1 вы должны использовать указатель:

int main()
{
 void f1(int*call_count){ *call_count = *call_count + 1;}
void f2(int*call_count){ *call_count = *call_count + 1;}

  int call_count=0;
  f1(&call_count);
  f2(&call_count);

  printf("%d",call_count);

 }

Или вы измените тип функции: int вместо void

int main()
{
 int f1(int call_count){ return call_count + 1;}
 int f2(int call_count){ return  call_count + 1;}

  int call_count=0;
  int result1=f1(call_count);
  int result2=f2(result1);

  printf("%d",result2);

}

Если вы не знаете, как работает указатель в вашем случае, вы должны использовать решение 2

1 голос
/ 06 апреля 2020

вы отправляете копию call_count функциям f1 и f2, в C по умолчанию будет использоваться метод с именем по значению.

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

вам нужно сделать то, что вы хотите:

  1. , который вы можете вернуть call_count.

  2. с использованием указателей, что означает вызов по ссылке.

, поскольку вы хотите использовать указатели для выполнения sh this:

void f1(int *call_count) { *call_count = *call_count + 1; }
void f2(int *call_count) { *call_count = *call_count + 1; }

int main() {

    int call_count = 0;
    f1(&call_count);
    f2(&call_count);

    printf("%d", call_count);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...