如何在作为参数传递的函数中更新布尔变量

时间:2019-02-04 09:14:44

标签: c boolean

在上述代码中,如何在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 :(得分:4)

C使用传递值进行函数参数传递,因此在函数内部对接收到的参数所做的更改将不会反映给调用者。

您可以

  • 返回新值并存储到原始变量

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

    ,然后在main()

    a = changebool(a);
    
  • 传递指向原始变量的指针,并更改指向该地址的指针所指向的值。

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

    ,然后在main()

    changebool(&a);
    

注意:

  1. 摆脱;中的#define,它们不是必需的,以后可能会引起问题。
  2. stdbool.h already defines true and false,您可以使用它们而不是尝试定义自己的常量。
  3. 在方法1中,我们需要更改函数的返回类型。
  4. 请在功能上使用有意义的名称,以免混淆未来的读者(包括您自己)。我已经按照我的榜样做了。

答案 1 :(得分:3)

您需要传递一个指针,然后在函数内部取消引用,以更改/更改传递的参数:

#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,则不需要FALSEstdbool.h,而应使用truefalse

答案 2 :(得分:3)

尝试一下:

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

在主要情况下,调用函数如下:printbool(&a);

答案 3 :(得分:2)

void printbool(bool a)

需要成为

void printbool(bool *a)

并通过指针分配:

*a=TRUE;

呼叫为

printbool(&a);

基本知识-您需要知道这一点。