首页 > 解决方案 > C:初始化结构并将其分配给函数参数中的指针

问题描述

由于在 Uni 的分配,我面临着必须将结构初始化为作为函数参数提供的指针的奇怪问题。在该 init 函数中一切看起来都很好,但是一旦我尝试在不同的函数中访问对象的值,它们看起来就是空的。

由于我在解释事情方面很糟糕,我得到了一个带有实际和预期输出的小例子:

#include <stdlib.h>
#include <stdio.h>

struct foo {
    int bar;
};

void init_foo(struct foo* f) {
    f = malloc(sizeof(struct foo));
    f->bar = 5;
    printf("bar0: %d\n", f->bar);
}

void print_foo(struct foo* f) {
    printf("bar1: %d\n", f->bar);
}

int main() {
    struct foo f;
    init_foo(&f);
    print_foo(&f);
}

实际输出:

bar0: 5
bar1: 0

预期输出:

bar0: 5
bar1: 5

我以前没有过多地处理过 C,所以如果有人可以对此提供解释和/或解决方案,我将非常感激。

标签: cpointersstructmalloc

解决方案


main(),ffoo结构的分配版本。您将指向该分配结构的指针传递给init_foo().

没有f必要malloc()init_foo(). f已经指向一个分配的结构。

我认为如果您只是删除malloc(),它应该可以工作。


推荐阅读