我已经搜索了此问题的修复程序,但找不到解释。我有一个二维结构,其中有一个整数变量。
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?是什么原因造成的,我该如何解决?谢谢!
答案 0 :(得分:0)
首先,您可以通过一种简单的方式像下面这样初始化您的结构:
Example_Outer example = { 0 };
或者以第二种方式:
typedef struct
{
Example two_dimensional_array[5][5] = { 0 };
} Example_Outer;
现在,在代码中,您忘记了*
函数中的void initialise(Example_Outer example)
,在这种情况下,您只是在函数中传递了struct的副本。
因此,您应该将结构体的地址用作带指针(*
)的函数的参数:
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);
}