職種:第5章で学ぶためのムーのレッスン。そして、あなたがコンピュータのテストでコードを実行するには、意味のある知識や難しさを考えるいずれかを選択し、完全な実験的な検証プロセスを記述します。実験的に知識のポイントを使用することを証明しました。
変数のライフサイクルの分析 |
まず、ライフサイクルの定義:プログラムは時間の存在を実行した変数。
第二に、分類:
1、グローバル変数
実行中のプログラムがありました。
2、グローバル静的変数
実行中のプログラムがありました。
3、ローカル変数
プログラムはローカルスコープが不足すると、変数はちょっと、正確な破壊であることを、姿を消しました。
4、静的ローカル変数
実行中のプログラムがありました。(この理解は、私がこの記事を書いたここで私は明らかだ、同じではないと思われる前に)
第三に、検証のプロセス
以下のコードを見てください:
#include <iostream>
using namespace std;
int entire_a = 1;//赋了初值的全局变量
int entire_b;//全局变量
static int entire_c;//全局静态变量
void Local1()//验证静态局部变量只在第一次进入的时候做初始化,以后会跳过初始化语句,保留原来的值
{
int i = 10;
while (i <= 20)
{
static int n = 1;//静态局部变量
n += 1;
static int local_t = 2;
i += local_t;
}
}
void Local2()
{
int local_s = 6;//局部变量
cout << local_s;
static int local_t = 3;//静态局部变量
cout << "local_t = " << local_t << ",local_s = " << local_s << endl;
}
int main()
{
Local1();
cout << "a = " << entire_a << ",b = " << entire_b << ",c = " << entire_c << endl;//输出全局变量的初始值
entire_a = 11;//改变全局变量a的值
entire_b = 121;//改变全局变量b的值
entire_c = 131;//改变全局静态变量c的值
cout << "a = " << entire_a << ",b = " << entire_b << ",c = " << entire_c << endl;//输出修改之后之后的全局变量值
Local2();//调用函数Local(),输出局部变量local_s的值和局部静态变量local_t的值
int local_s = 66;//重新定义的新的局部变量local_s
static int local_t = 33;//重新定义的新的局部变量local_t
cout << "local_t = " << local_t << ",local_s = " << local_s << endl;//可以输出新的局部变量local_s和新的局部变量local_t
}
、Bを見ることができるように、すなわち、コンパイル時にメモリを割り当てると、グローバルオブジェクトを初期化し、グローバルに存在していたC、しかし主な機能に使用される時間とlocal_t local_sは、新しい変数を再生成するために、対応する(しない再定義する必要がありa)の前に、またはこれは、以下の問題があります
静的ローカル変数の宣言:
void Local1()//验证静态局部变量只在第一次进入的时候做初始化,以后会跳过初始化语句,保留原来的值
{
int i = 10;
while (i <= 20)
{
static int n = 0;//静态局部变量
n += 1;
static int local_t = 2;
i += local_t;
}
}
これら三つの初期化の数値はn = 0から分かるように、スキップされた最初の時間の後に、描くことができる:静的ローカル変数は大域変数と等価である(のみ、この機能にアクセスすることができるが、ライフサイクルとほぼ同じグローバル変数)は、関数の後にまだ変数を終了しますが、唯一のエントリの最初の時間を行うことが第一で、将来的には、元の値を保持して、初期化ステートメントをスキップします。
結論:
1、変数のスコープは、ライフサイクルとは異なります。中の変数のスコープとライフサイクルの属性空間と時間は、 2次元を反映しています。スコープを参照することができる変数の範囲であり、ライフサイクルは、一定の期間を参照できる変数です。変数のスコープと存続期間を指定するには、C ++には多くの方法があります。最も一般的な、例えば:のように、{} static修飾子。
グローバルデータのライフサイクルの可変領域に格納されている2は、プログラム全体に存在するが、データは、機能の範囲の端部にスタックに格納されている、などである静的変数に加えて、スタックとローカル変数の破壊につながりますスタックに保存されています。静的変数のグローバルまたはローカル宣言のグローバル変数領域にあるかどうかをプログラムに格納されています。したがって、静的ローカル変数のライフサイクルは、プログラムの実行中に存在しています。