C 函数返回值与预期值不同

C 函数返回值与预期值不同,c,C,我很难理解发生了什么。第二个令牌的值是某个随机数,而不是1。为什么第二个标记的值不是函数中的值 struct player { char name[20]; enum cell token; unsigned score; }; BOOLEAN init_player2(struct player *second, enum cell token) { token = 1; } int main() { struct player second; init_play

我很难理解发生了什么。第二个令牌的值是某个随机数,而不是1。为什么第二个标记的值不是函数中的值

struct player
{
char name[20];
enum cell token;
unsigned score;
};


BOOLEAN init_player2(struct player *second, enum cell token)
{
    token = 1;
}

int main()
{
    struct player second;
    init_player2(&second, second.token);
    printf("The value of second token is: %d\n", second.token);

    return 0;
}

C使用传递值传递函数参数

在代码中,
second.token
按值传递,因此在函数中对其所做的任何更改都不会反映给调用方

您所期望的是下面的代码

void change( int x)
{
      x = 10;
}

int main(void)
{
    int p = 5;
    change(p);
    printf("%d\n", p);
    return 0;
}
打印10,这根本不可能。(如果你以
change(15);
的形式打电话,想象一下恐怖的情景。)

解决方案:

您不需要单独传递第二个参数。您已经将指针传递给包含枚举变量的结构,只需使用指针更改被调用函数中的值,然后在调用者中打印结构变量的枚举成员的值

struct player
{
char name[20];
enum cell token;
unsigned score;
};


BOOLEAN init_player2(struct player *second, enum cell token)
{
    second->token= 1;
}

int main()
{
    struct player second;
    init_player2(&second, second.token);
    printf("The value of second token is: %d\n", second.token);

    return 0;
}

您只需要在函数内部使用结构变量,并使用指针来更改值

token=1
second.token
没有影响。您需要
second->token=1(第二个参数是多余的)。而且,我认为没有必要传递第二个参数!对于这一个,肯定有几十个几乎是重复的问题,@CBegin你应该先搜索类似的问题,然后再问自己。传递第二个参数有什么用?正如dup公认的答案所说:C永远不会通过引用传递。它严格按价值传递。关于常量:Python严格地按引用传递,但仍然可以将文本传递给函数。它就像一个符咒。没有恐怖!