Как обновить логическую переменную в функции, передаваемой в качестве параметра - PullRequest
0 голосов
/ 04 февраля 2019

В упомянутом коде, как получить обновленное значение в выписке printf("value : %d\n",a);

#include <stdio.h>
#include <stdbool.h>

#define TRUE 1;
#define FALSE 0;

void printbool(bool a);
int main()
{
    bool a = FALSE;
    printf("Hello, World!\n");
    printbool(a);
    printf("value : %d\n",a);
    return 0;
}

void printbool(bool a)
{
    a = TRUE;
}

Ответы [ 4 ]

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

Попробуйте:

void printbool(bool *a)
{
  *a = TRUE;
}

В основном, вызовите функцию так: printbool(&a);

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

Вам нужно передать указатель, а затем разыменовать внутри функции, чтобы изменить / изменить переданный аргумент:

#include <stdio.h>
#include <stdbool.h>

#define TRUE 1
#define FALSE 0

void printbool(bool *a);
int main()
{
    bool a = FALSE;
    printf("Hello, World!\n");
    printbool(&a);
    printf("value : %d\n",a);
    return 0;
}

void printbool(bool *a)
{
    *a = TRUE;
}

Также обратите внимание, что вам не нужно define TRUE и FALSEесли вы включаете stdbool.h, вместо этого используйте true и false.

0 голосов
/ 04 февраля 2019
void printbool(bool a)

должно быть

void printbool(bool *a)

и назначаться через указатель:

*a=TRUE;

вызывать как

printbool(&a);

Основные вещи - вам нужнознать это.

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

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

Вы можете либо

  • вернуть новое значение и сохранить в исходную переменную

    bool changebool(bool a)
    {
        a = TRUE;
        return a;
    }
    

    и, в main()

    a = changebool(a);
    
  • передать указатель на исходную переменную ивнесите изменения в значение, на которое указывает указатель адреса.

    void changebool(bool* a)
    {
        *a = TRUE;
    }
    

    и, в main()

    changebool(&a);
    

Примечание:

  1. Избавьтесь от ; s в #define, они не нужны и могут вызвать проблемы позже.
  2. stdbool.h уже определяет true и false, вы можете использовать их, вместо этого пытаясь определить свои собственные константы.
  3. В подходе 1 нам нужно изменить тип возвращаемого значения функции.
  4. Пожалуйста, используйте значимыеНазовите функции, чтобы не путать будущих читателей (в том числе и себя).Я уже сделал с моим примером.
...