如何使用指针初始化结构



当我想初始化结构的所有组件时,我在main函数中这样做:

这是struct:

typedef struct {
int data[1000];
int oc;
} Table;

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

int main() {
Table x = {0};

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

void initialize(Table *y) {
y = {0};
}

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

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

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

总而言之:

void initialize(Table *y){
*y = (Table){0};
}

创建(Table){0}的复合文字创建了一个临时Table结构对象,其中包含该结构的初始值设定项。然后,该临时结构对象被分配(复制到(y所指向的Table结构对象

它有点类似于以下内容:

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

只需对其进行memset。

void initialize(Table *y) {
memset(y, 0, sizeof *y);
}

最新更新