陣列宣告

「陣列宣告」會為陣列命名並指定其元素的類型。 它也可以定義陣列中元素的數目。 具有陣列類型的變數會視為是陣列元素類型的指標。

語法

declaration
declaration-specifiers init-declarator-listopt ;

init-declarator-list
init-declarator
init-declarator-list , init-declarator

init-declarator
declarator
declarator = initializer

declarator
pointeropt direct-declarator

direct-declarator
direct-declarator [ constant-expressionopt ]

因為 constant-expression 是選擇性的,語法有兩種形式:

  • 第一個形式會定義陣列變數。 方括弧內的 constant-expression 引數會指定陣列中的元素數目。 constant-expression (如果有的話) 必須具有整數類型與大於零的值。 每個元素都具有 type-specifier 所指定的類型,可以是除了 void 以外的任何類型。 陣列元素不可為函式類型。

  • 第二個形式會宣告一個已在其他地方定義的變數。 它會省略方括弧中的 constant-expression 引數,但不會省略方括弧。 只有當您先前初始化陣列、將其宣告為參數,或已在程式的其他位置明確將其宣告為陣列的參考時,才可以使用這個形式。

這兩種形式中,direct-declarator 會為變數命名,而且可以修改變數的類型。 方括弧 ([ ]) 加上後面的 direct-declarator 會將宣告子修改為陣列類型。

類型限定詞可以出現在陣列類型物件的宣告中,不過,限定詞會套用到元素,而不會套用到陣列本身。

您可以宣告陣列的陣列 (「多維」陣列),方法是以下列形式,在陣列宣告子後方使用括號括住常數運算式清單:

type-specifier declarator [ constant-expression ] [ constant-expression ] ...

方括弧中的每個 constant-expression 都會定義指定維度的元素數目:二維陣列具有兩個以括弧括住的運算式、三維陣列有三個,依此類推。 只有在您先前已初始化陣列、將其宣告為參數,或已在程式的其他位置明確將其宣告為陣列的參考時,才可以忽略第一個常數運算式。

您可以使用複雜的宣告子定義各種物件類型的指標陣列,如解譯更複雜的宣告子中所述。

陣列會依資料列儲存。 例如,下列陣列由二個資料列和三個資料行所組成,其中:

char A[2][3];

三個資料行中的第一個資料列會先儲存,再儲存三個資料行中的第二個資料列。 這表示最後一個註標變化的速度最快。

若要參考陣列的個別元素,請使用一個註標運算式,如後置運算子中所述。

範例

這些範例說明陣列宣告:

float matrix[10][15];

名為 matrix 的二維陣列中一共有 150 個元素,每個都是 float 類型。

struct {
    float x, y;
} complex[100];

此範例是結構陣列的宣告。 這個陣列具有 100 個元素,每個元素都是一種包含兩個成員的結構。

extern char *name[];

這個陳述式會將陣列的類型和名稱宣告為 char 的指標。 name 的實際定義位於其他地方。

Microsoft 特定的

保留陣列大小上限所需的整數類型為 size_t 的大小。

END Microsoft 特定的

另請參閱

宣告子和變數宣告