C struct值在函数内外不同

时间:2015-12-12 22:16:42

标签: c arrays pointers struct

首先我的代码几行:

typedef struct {
    char letter;
    ...
} Monster;

...

Monster *monsters;
load_monsters( monsters );

...

void load_monsters( Monster *monsters ) {
    FILE *file;
    file = fopen( MONSTERSFILE, "rb" );
    int count;
    fread( &count, sizeof( count ), 1, file );
    monsters = malloc( count * sizeof( Monster ) );
    fread( monsters, sizeof( Monster ), count, file );
    fclose( file );
}

我有问题,因为monsters数组中的值,即monsters [0] .letter在功能和外部功能上有所不同。在功能上他们很好,但外面很糟糕。我检查了指针的地址和内外功能它是一样的。我不明白为什么会这样。

1 个答案:

答案 0 :(得分:2)

你正在通过值传递怪物*(即怪物[i]可以使用外部可见的效果进行修改,但是怪物 - 指针 - 本身通过值传递)。

您正在修改函数中的怪物(通过为其指定malloc的结果)。在函数外部不会看到此更改。

在函数外部分配怪物,或者将Monster **传递给函数,分配*怪物,然后写入(*怪物)[i]