- # C言語/C++入門 > 関数と変数のスコープ
変数の記憶クラス
スポンサーリンク
スポンサーリンク
ライフスタイル関連のコンテンツ
お金 | 仕事 | 勉強 | プライベート | 健康 | 心
プログラミング関連のコンテンツ
C言語/C++入門 | Ruby入門 | Python入門 | プログラミング全般
お金 | 仕事 | 勉強 | プライベート | 健康 | 心
プログラミング関連のコンテンツ
C言語/C++入門 | Ruby入門 | Python入門 | プログラミング全般
変数は、スコープのほかに、記憶クラスという属性も持っています。
変数の記憶クラスは、永続的なものと一時的なものの2つがあります。
スポンサーリンク
グローバル変数は、常に永続的な記憶クラスとなり、プログラムが終了するまで存続します。
一時的な変数は、ブロックの先頭にあるスタックというメモリ領域で割り当てられ、ブロックの終わりでスタックに返され、ブロックが実行される度に初期化されます。
ローカル変数は、静的な(static)変数として宣言しない限り、一時的な記憶クラスとなります。
#include <iostream> int main() { int counter; // カウンタ // forループ for (counter = 0; counter < 5; counter++) { int temp = 1; // ブロックが実行されるたびに初期化される一時的な記憶クラスの変数 static int perm = 1; // static宣言 std::cout << "Temp:" << temp << " Perm:" << perm << " Counter:" << counter << "\n"; temp++; perm++; } std::cout << "Out of forloop:\n"; std::cout << "Counter:" << counter << "\n"; }
実行結果。
Temp:1 Perm:1 Counter:0 Temp:1 Perm:2 Counter:1 Temp:1 Perm:3 Counter:2 Temp:1 Perm:4 Counter:3 Temp:1 Perm:5 Counter:4 Out of forloop: Counter:5
ここで、forループの中で、カウンターを初期化する書き方をしてみると・・・
// 2つ目のforループ for (int i = 5; i < 10; i++) { // for文の中で変数iを初期化 std::cout << i << "\n"; } std::cout << i << "\n"; // ここでは、「i」はスコープを外れている。初期化されていない変数だ、とエラーメッセージが出る
この場合、変数「i」のスコープは、for文のブロック内のみとなります。
スポンサーリンク
>> 次の記事 : 名前空間・namespace
<< 前の記事 : グローバル変数とローカル変数
- - 関連記事 -
- 再帰関数
- 関数の引数型/値呼び出し(値渡し)・参照呼出し(参照渡し)・配列
- インライン関数・inline
- デフォルト引数・定義された引数を使用しない関数
- 関数のオーバーロード
- 参照型の戻り値で関数定義・参照戻し
- 参照型の引数で関数定義
- const宣言の引数を持つ関数
- 引数のない関数(void)・voidの戻り値
- 関数の定義
- using文・using namespace
- 名前空間・namespace
- グローバル変数とローカル変数
スポンサーリンク