首頁 >後端開發 >C++ >C 和 C 中的自動結構和陣列如何部分初始化?

C 和 C 中的自動結構和陣列如何部分初始化?

DDD
DDD原創
2024-12-19 05:32:21201瀏覽

How are Automatic Structures and Arrays Partially Initialized in C and C  ?

C 和C 中自動結構體和陣列的部分初始化

GNU C 參考手冊指出,如果結構體變數未初始化,其成員的價值觀是不確定的。但是,標準沒有定義結構體或陣列的部分初始化。

部分初始化術語

「部分初始化」是指提供以下物件一些但不是全部初始化器聚合(陣列或結構)。

自動結構和的初始化規則數組

C 和 C標準為自動結構體和陣列的初始化指定了以下規則:

  • 如果聚合已完全初始化(即,有足夠的初始化器所有元素或成員),則初始化的元素/成員被分配指定的值,而其餘元素/成員為零初始化(對於整數)或NULL 初始化(對於指標類型)。
  • 如果聚合未初始化,則所有元素/成員都是不確定的。

部分初始化行為

儘管標準中沒有明確定義部分初始化,但所有主流編譯器都遵循以下規定行為:

  • 對於自動數組,如果初始化器的數量少於數組的大小,則未初始化的元素將初始化為0。
  • 對於自動結構體,如果初始化器的數量少於數組的大小比結構成員的數量,未初始化的成員被值初始化。在 C 中,這表示類別資料成員預設初始化,而非類別資料成員零初始化。

範例

以下C程式碼部分初始化一個結構體:

struct S {
    int a;
    char* b;
    int c;
};

S s = {1, "asdf"};

在此範例中,s.a 初始化為1 、s.b 被初始化為“asdf”,而s.c 因未明確初始化而為零初始化。

以上是C 和 C 中的自動結構和陣列如何部分初始化?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn