如何使用指针初始化结构体

Ten*_*nko 0 c

当我想初始化结构体的所有组件时,我在函数中执行main此操作,如下所示:

这是struct

typedef struct {
    int data[1000];
    int oc;
} Table;
Run Code Online (Sandbox Code Playgroud)

这就是我将所有组件初始化为 0 的方法(数组和 int 现在都是 0)。

int main() {
    Table x = {0};
Run Code Online (Sandbox Code Playgroud)

现在我想做完全相同的事情,但使用一个函数。我想做这样的事情:

void initialize(Table *y) {
    y = {0};
}
Run Code Online (Sandbox Code Playgroud)

我认为它不起作用,因为要初始化它,我应该在声明它时执行它,那么如何使用函数初始化结构呢?

pmg*_*pmg 6

只需记住它即可。

void initialize(Table *y) {
    memset(y, 0, sizeof *y);
}
Run Code Online (Sandbox Code Playgroud)


Som*_*ude 6

请记住,y我们是一个指针,因此您必须取消引用它才能分配对象本身。

此外,您还需要告诉编译器赋值来自对象Table,这是通过复合文字完成的。

总而言之:

void initialize(Table *y){
    *y = (Table){0};
}
Run Code Online (Sandbox Code Playgroud)

复合文字创建(Table){0}创建一个临时Table结构对象,以及该结构的初始值设定项。然后这个临时结构体对象被赋值(复制)到指向的Table结构体对象。y

它有点类似于以下内容:

void initialize(Table *y){
    Table temp_struct_object = {0};  // Normal initialization
    *y = temp_struct_object;  // Normal assignment (copy of object)
}
Run Code Online (Sandbox Code Playgroud)