C语言中,结构体(struct)是一种自定义的数据类型,用于将不同类型的数据组合在一起。初始化结构体是指在定义结构体变量的同时,为其成员变量赋予初始值。使用 指定初始化器 来初始化结构体,它能提高代码的可读性和可维护性。零初始化在你需要将结构体设置为已知默认状态时非常有用,部分初始化则适用于只初始化一些字段的情况。

1、C90 初始化

在 C90 中,结构体初始化通常是手动完成的,当时并不支持指定初始化器(这个特性是在 C99 中引入的)。需要按照结构体字段的声明顺序来提供初始化值。

#include <stdio.h>

struct Point {
    int x;
    int y;
};

int main() {
    struct Point p = {1, 2};  // x = 1, y = 2
    printf("%s",p);
    return 0;
}

2、C99 及之后指定初始化器

C99 标准引入了 指定初始化器,允许你通过字段名而不是字段的位置来指定结构体成员的值。这增强了代码的可读性,并减少了在字段顺序变化时可能出现的错误。

#include <stdio.h>

struct Point {
    int x;
    int y;
};

int main() {
    struct Point p = {.x = 1, .y = 2};  // 清晰地指定每个字段的值
    return 0;
}

3、部分初始化

在初始化结构体时,如果没有显式地初始化某些字段,C99 及之后的标准会自动将它们初始化为 零(对于数值类型)或 NULL(对于指针类型)。这种特性在只需要初始化某些字段而不需要手动初始化其他字段时非常有用。

#include <stdio.h>

struct Point {
    int x;
    int y;
};

int main() {
    struct Point p = {.x = 1};  // 只初始化 'x','y' 会默认被初始化为 0
    return 0;
}

4、零初始化(C99 及之后的标准)

如要将结构体的所有字段初始化为零,可以使用空的花括号 {} 初始化。这在你希望将结构体初始化为已知状态而不需要手动设置每个字段时非常有用。

#include <stdio.h>

struct Point {
    int x;
    int y;
};

int main() {
    struct Point p = {0};  // x 和 y 都初始化为 0
    return 0;
}

5、联合体和嵌套结构体

如果结构体包含嵌套的结构体或联合体,可以用类似的方式初始化它们。对于嵌套结构体,可以使用指定初始化器来指定内层结构体字段的值。

#include <stdio.h>

struct Point {
    int x;
    int y;
};

struct Line {
    struct Point start;
    struct Point end;
};

int main() {
    struct Line l = {.start = {.x = 1, .y = 2}, .end = {.x = 3, .y = 4}};
    return 0;
}

推荐文档

相关文档

大家感兴趣的内容

随机列表