当我想初始化结构体的所有组件时,我在函数中执行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)
我认为它不起作用,因为要初始化它,我应该在声明它时执行它,那么如何使用函数初始化结构呢?
只需记住它即可。
void initialize(Table *y) {
memset(y, 0, sizeof *y);
}
Run Code Online (Sandbox Code Playgroud)
请记住,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)
| 归档时间: |
|
| 查看次数: |
130 次 |
| 最近记录: |