当我想初始化结构的所有组件时,我在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);
}