初始化純量型別
初始化純量時輸入,值指派運算式指派給變數。 工作分派的轉換規則將套用。 (請參閱型別轉換的轉換規則的詳細資訊。)
語法
declaration:
宣告規範初始化宣告子清單選擇**;**宣告規範:
儲存類別規範的宣告規範opt型別規範的宣告規範opt
型別限定詞的宣告規範opt
初始化宣告子清單:
初始化宣告子初始化宣告子清單**,** 初始化宣告子
初始化宣告子:
宣告子宣告子**=** 初始設定式 / * 純量的初始設定的 * /
初始設定式:
指派運算式
您可以初始化變數的任何型別,前提是必須遵守下列規則:
在檔案範圍層級宣告的變數可以進行初始化。 如果未明確初始化的變數在外部層級,在預設狀況下會初始化為 0。
常數運算式可以用來初始化所宣告的任何全域變數靜態 儲存類別規範。 變數宣告為靜態程式執行開始時,會初始化。 如果您未明確初始化全域靜態變數,它會初始化為 0 預設的情況下,並具有指標型別的每一個成員指派 null 指標。
以宣告的變數自動 或 註冊的儲存類別規範會初始化每次執行控制項傳遞至該區塊中所宣告。 如果您省略初始設定式的宣告不同時自動 或 註冊變數,變數的初始值是未定義。 自動的和暫存器值,在初始設定式不會套用至的區域常數。 它可以是包含先前定義的值,即使函式呼叫的任何運算式。
外部變數的宣告和所有的起始值靜態變數,無論是外部或內部,必須是常數運算式。 (如需詳細資訊,請參閱常數運算式。) 任何外部宣告或靜態變數的位址是固定的因為它可以用來初始化內部宣告靜態指標變數。 不過,位址自動變數不能用作為靜態初始設定式,因為這可能非常不同,每次執行該區塊。 您可以使用常數或變數的值來初始化自動 和 註冊變數。
如果識別項宣告擁有區塊範圍,並且識別項有外部連結,宣告不能有初始設定。
範例
下列範例會說明執行的初始化:
int x = 10;
Integer 變數x都會初始化為常數運算式10。
register int *px = 0;
指標px會初始化為 0,產生 「 null 」 指標。
const int c = (3 * 1024);
這個範例使用常數運算式(3 * 1024)初始化c不能修改,因為與常數值 const 關鍵字。
int *b = &x;
此陳述式會初始化指標b的位址,另一個變數, x。
int *const a = &z;
指標a使用一個名為變數的位址來初始化z。 不過,因為它已指定為 const,變數a只能初始化,永遠不會修改。 它一定會指向相同的位置。
int GLOBAL ;
int function( void )
{
int LOCAL ;
static int *lp = &LOCAL; /* Illegal initialization */
static int *gp = &GLOBAL; /* Legal initialization */
register int *rp = &LOCAL; /* Legal initialization */
}
全域變數GLOBAL宣告在外部層級,使其具有通用的存留期。 本機變數LOCAL有自動儲存類別和函式宣告它的執行期間只有一個地址。 因此,嘗試初始化靜態指標變數lp位址為LOCAL不允許。 靜態指標變數gp的位址初始化GLOBAL因為該地址永遠相同。 同樣地, *rp可以初始化,因為rp是區域變數,並可以有非常數初始設定式。 輸入的區塊時,每次LOCAL擁有新的地址,然後指派給rp。