C 结构体值在函数内部和外部不同

标签 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)在函数和外部函数中不同。在功能上它们很好,但外表很糟糕。我检查了指针的地址以及内部和外部函数,它是相同的。我不明白为什么会这样。

最佳答案

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

您正在函数内修改怪物(通过将 malloc 的结果分配给它)。此更改在函数外部不可见。

要么在函数外部分配monsters,要么将Monster**传递给函数,分配*monsters,然后写入(*monsters)[i]

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

相关文章:

c - 获取 Midi 文件时间

c++ - 阻止访问 Windows 上的物理地址

java - 填充二维 int 数组 int[][] 一定次数

c++ - 链接硬编码函数指针

c - 如何加载ELF镜像到内存并执行?

javascript - 如何在数组列表中找到公共(public)元素?

java - 如何解决这个递归函数难题?

c++ - 数组是 C++ 中的 const 指针吗?

c - 在结构类型中填充 4 个变量并使用 malloc

c - 如何获取输入直到输入 "only"换行符或空格?基本上如何运行循环直到您不输入任何内容作为输入?