首页  >  文章  >  后端开发  >  可以使用指针成员的指定初始化程序来初始化 C 结构吗?

可以使用指针成员的指定初始化程序来初始化 C 结构吗?

Susan Sarandon
Susan Sarandon原创
2024-11-02 02:20:30853浏览

Can C   Structures Be Initialized Using Designated Initializers for Pointer Members?

C 结构体初始化

有人质疑是否可以使用以下语法在 C 中初始化结构体:

struct address {
    int street_no;
    char *street_name;
    char *city;
    char *prov;
    char *postal_code;
};

address temp_address = { .city = "Hamilton", .prov = "Ontario" };

虽然一些消息来源表明这种风格仅在 C 中支持,但这并不完全准确。

技术限制

尽管 C 支持使用指定的结构初始化初始化程序有一个技术限制:作为指针或引用的成员不支持指定初始化。由于所提供示例中的 street_name、city、prov 和 postal_code 都是指针,因此不能使用指定的初始化语法来初始化这些成员。

最佳实践和可读性

虽然指定的初始化语法可以提供清晰的可读性,但通常认为最好的做法是使用默认构造函数和显式成员初始化的组合来初始化结构。这允许您指定显式初始化哪些成员以及不初始化哪些成员。

例如,您可以按如下方式初始化 temp_addres 结构:

address temp_addres = {
  0,  // street_no
  nullptr,  // street_name
  "Hamilton",  // city
  "Ontario",  // prov
  nullptr,  // postal_code
};

此方法通过使用提供清晰的可读性评论来识别每个成员及其价值。此外,为了安全起见,它还确保将任何未显式初始化的指针设置为 nullptr。

以上是可以使用指针成员的指定初始化程序来初始化 C 结构吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn