首頁  >  文章  >  後端開發  >  可以使用指標成員的指定初始化程序來初始化 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