关于函数内部和外部的结构值赋值的混淆

时间:2016-03-06 01:55:39

标签: c struct

struct ConnectFlags {
    bool username;
    bool password;
};    

void functionB(struct ConnectFlags connect) {
     connect.username = true;
     connect.password = true;
}

void functionA() {
    struct ConnectFlags flags;
    functionB(flags);

    if(flags.username && flags.password) {
          printf("Both present\n");
    } else {
          printf("None present\n");
    }
}

int main() {
   functionA();
}

我有上面的代码,当我执行它时,我得到“无存在”。我在functionB中将用户名和密码的值设置为true,那么为什么我仍然将它们视为false。

任何帮助都会非常感激。

谢谢!

1 个答案:

答案 0 :(得分:2)

在C中,参数按值传递,因此修改被调用者中的参数不会影响调用者的局部变量。

使用指针调整调用者的局部变量。

struct ConnectFlags {
    bool username;
    bool password;
};

void functionB(struct ConnectFlags *connect) {
     connect->username = true;
     connect->password = true;
}

void functionA() {
    struct ConnectFlags flags;
    functionB(&flags);

    if(flags.username && flags.password) {
          printf("Both present\n");
    } else {
          printf("None present\n");
    }
}

int main() {
   functionA();
}