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中文网其他相关文章!