初期化のスカラー型
スカラー型を初期化すると 代入式 の値が変数に代入されます。割り当ての変換規則が適用されます。(変換規則の詳細については型変換 を参照してください)。
構文
declaration:
宣言指定子 ; 宣言リスト optinit宣言指定子 :
ストレージ クラス指定子の宣言指定子 opt型指定子の宣言指定子 opt
宣言型修飾子の指定子 opt
init 宣言リスト :
init 宣言init 宣言リスト の 宣言 init
init 宣言子 :
宣言スカラー初期化の 宣言 の 初期化子 の = /* */
初期化子 :
代入式
次の規則に従って任意の型の変数を初期化できます :
ファイル スコープのレベルで宣言された変数を初期化できます。外部レベルで変数を明示的に初期化既定ではは 0 に初期化されます。
定数式が 静的 の ストレージ クラス指定子 で宣言したグローバル変数の初期化に使用できます。 静的 として宣言された変数はプログラムの実行が開始される初期化します。明示的に 静的 のグローバル変数を初期化しは既定で 0 に初期化されたポインター型を持つすべてのメンバーが null ポインターを割り当てます。
自動 または 登録 " ストレージ クラスの指定子で宣言した変数は実行がそのコントロール宣言されたブロックに渡されるたびに初期化されます。 自動 または 登録 変数の宣言の初期化子を省略すると変数の初期値は未定義です。自動とレジスタの値は初期化子は定数であることに制限はありません ; これは定義済みの値関数呼び出しの前に含まれている式です。
外部変数の宣言と 静的 のすべての変数の初期値は内部または外部かどうか定数式である必要があります。(詳細については定数式 を参照してください)。外部で宣言された変数または静的変数のアドレスは上がっているため内部的に宣言された 静的 のポインター変数の初期化に使用できます。ただし 自動 変数のアドレスは静的初期化子としてブロックを実行するたびに異なる可能性があるため使用できません。 自動 と 登録 の変数を初期化するの定数または変数の値を使用できます。
識別子の宣言にブロック スコープを持ち識別子には外部リンケージがある場合は宣言に初期化することはできません。
例
次の例では初期化を示しています :
int x = 10;
整数変数 x は定数式 10 に初期化されます。
register int *px = 0;
px ポインターは 0 に初期化され「 not NULL 」ポインターを生成します。
const int c = (3 * 1024);
この例では 定数 のキーワードに変更できない定数値に c を定数式 (3 * 1024) を使用します。
int *b = &x;
このステートメントは変数のアドレスを持つポインターを初期化 bx。
int *const a = &z;
a ポインターは z という名前の変数のアドレスを初期化します。ただし 定数 であることを示すため可変 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 に 自動 のストレージ クラスがあり宣言された関数の実行中にアドレスが表示される。したがってLOCAL のアドレスで 静的 のポインター lp 変数を初期化するときには使用できません。このアドレスは常に同じであるため 静的 のポインター変数 gp は GLOBAL のアドレスに初期化できます。同様に*rp は rp ローカル変数が初期化されている定数ではない初期化子を持つことも可能です。ブロックが入力されるたびにLOCAL に rp に割り当てられた新しいアドレスがあります。