ベストアンサー
グローバルとローカル:スコープに関連している、つまり使用できる場所
静的:は時間と変動性に関連している、つまり使用できる期間
CおよびC ++プログラムの静的変数は1回だけ定義され(割り当てられたメモリと初期値ゼロ)、プログラム制御でさえ宣言ステートメントを再度実行します。静的変数の値と有効期間はプログラムが終了するまで保持されますが、スコープ内で使用できます。
void staticTest(){
static int i;
printf("\%d\n",i);
i++;
}
void main(){
staticTest();
staticTest();
staticTest();
}
出力:
0
1
2
上記の例では、ローカル静的変数の使用が示されています。
グローバル静的: グローバルスコープで静的変数を宣言できます。また、値を割り当てない場合は、初期値がゼロであることを除いて、他のグローバル変数とほぼ同じになります。
回答
ローカル静的:
- デフォルト値はゼロです
- データセクションに保存されます(bssまたは初期化された)メモリの
- スコープまたは可視性はブロックまたは関数内にあります
- ローカル静的変数の有効期間はプログラムで開始および終了します。
グローバル静的:
- グローバル変数が静的である場合、スコープまたは可視性はそのファイル内にのみ存在し、別のファイルでexternを使用しても機能しません。リンケージエラーが発生します。
例1:
static int a=20;
void xyz()
{
printf("\%d, ", a);
a = 100;
}
int main()
{
printf("\%d, ", a);
{
static int a = 10;
printf("\%d, \n", a);
xyz();
}
printf("\%d", a);
}
// Output is 20, 10, 20, 100