C编程-赋值后struct中的整数值变成“随机”

时间:2018-10-21 11:15:00

标签: c struct initialization

我已经搜索了此问题的修复程序,但找不到解释。我有一个二维结构,其中有一个整数变量。

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?是什么原因造成的,我该如何解决?谢谢!

1 个答案:

答案 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);

}