gpt4 book ai didi

C 编程 - 结构体中的整数值在赋值后变为 "random"

转载 作者:行者123 更新时间:2023-11-30 20:30:57 24 4
gpt4 key购买 nike

我已寻找此问题的解决方案,但未能找到解释。我有一个二维结构,其中有一个整数变量。

typedef struct
{
int example;

} Example;

typedef struct
{
Example two_dimensional_array[5][5];
} Example_Outer;

然后,我使用以下函数将此变量设置为所有字段的 0 并打印当前值。

void initialise(Example_Outer example)
{
for(int i = 0; i < 5; i++){
for(int j = 0; j < 5; j++){
example.two_dimensional_array[i][j].example = 0;
}
}

print_example(example);

}

在此打印过程中,值全部显示为 0,就像它们应该的那样。

输出:

0, 0, 0, 0, 0,
0, 0, 0, 0, 0,
0, 0, 0, 0, 0,
0, 0, 0, 0, 0,
0, 0, 0, 0, 0,

然后,我运行一个使用完全相同的打印代码的新函数,并收到以下输出:

0, 0, 0, 0, 9, 
0, -394918304, 32551, -2138948520, 32764,
1, 0, 1, 0, 1775692253,
21904, -394860128, 32551, 0, 0,
1775692176, 21904, 1775691312, 21904, -2138948320,

打印方法:

void print_example(Example_Outer example)
{
for(int i = 0; i < 5; i++){
for(int j = 0; j < 5; j++){
printf("%d, ", example.two_dimensional_array[i][j].example);
}
printf("\n");
}
}

主要方法:

int main( int argc, const char* argv[] )
{
Example_Outer example;
initialise(example);
printf("---------------\n");
print_example(example);

}

为什么变量不保持设置为 0?造成这种情况的原因是什么以及如何解决?谢谢!

最佳答案

首先,您可以像下面这样简单地初始化您的结构:

Example_Outer example = { 0 };

或者第二种方式:

typedef struct
{
Example two_dimensional_array[5][5] = { 0 };
} Example_Outer;

现在,在您的代码中,您忘记了 voidinitialise(Example_Outer example) 函数中的 *,在这种情况下,您只需在函数中传递结构的副本。

因此,您应该使用结构体的地址作为带有指针 (*) 的函数的参数:

void initialise(Example_Outer *example)
{
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
example->two_dimensional_array[i][j].example = 0;
}
}

print_example(*example);
}

最后,您可以按如下方式传递结构体的地址:( Test it online ) :

int main(int argc, const char* argv[])
{
Example_Outer example;
initialise(&example);
printf("---------------\n");
print_example(example);

}

关于C 编程 - 结构体中的整数值在赋值后变为 "random",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52914705/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com