首先,我的代码有几行:

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在功能和外部功能上都不同。在功能上,它们不错,但外面很差。我已经检查了指针的地址以及内部和外部函数是否相同。我不明白为什么会这样。

最佳答案

您正在按值传递Monster *(即,可以用在外部可见的效果修改Monsters [i],但是按值传递Monsters-指针本身)。

您正在函数中修改怪物(通过为其分配malloc结果)。此更改在函数外部不可见。

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

关于c - 内部和外部函数的C结构值不同,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34245650/

10-11 21:53