一例staticの役割を理解する
staticキーワードはC言語で非常に重要です.そのため面接では、面接官がこれを持って被面接者を受験することもよくあります.このキーワードの役割を例に挙げてみましょう.
多くの人が馬鹿になったのに、どうしてですか.そうですね.どうしてですか.
staticで修飾された変数には常にメモリ静的領域が存在するため、この関数を実行して終了しても、この静的変数の値は破棄されず、関数が次回使用されるときもこの値を使用できます.
なぜjはずっと1なのかと聞かれた.fun 2()という関数を呼び出すたびにjは強制的に0に置かれるからである.
staticの役割:
(1)関数体内のstatic変数の作用範囲は、auto変数とは異なり、この変数のメモリは1回しか割り当てられていないため、その値は次回の呼び出し時に前回の値を維持する.
(2)モジュール内のstaticグローバル変数はモジュール内で使用される関数によってアクセスできるが、モジュール外の他の関数によってアクセスできない.
(3)モジュール内のstatic関数は、このモジュール内の他の関数によってのみ呼び出され、この関数の使用範囲は、宣言されたモジュール内に制限される.
(4)クラス内のstaticメンバー変数はクラス全体が所有し、クラスのすべてのオブジェクトに対して1部のコピーしかない.
(5)クラス内のstaticメンバー関数はクラス全体が所有するものであり,この関数はthisポインタを受信しないため,クラスのstaticメンバー変数にのみアクセスできる.
#include <stdio.h>
static int j;
void func1(void)
{
static int i = 0;
i++;
printf("i = %d
", i);
}
void func2(void)
{
j = 0;
j++;
printf("j = %d
", j);
}
int main(int argc, char *argv[])
{
int k = 0;
for(k = 0; k<10; k++)
{
func1();
func2();
printf("
");
}
return 0;
}
出力:多くの人が馬鹿になったのに、どうしてですか.そうですね.どうしてですか.
staticで修飾された変数には常にメモリ静的領域が存在するため、この関数を実行して終了しても、この静的変数の値は破棄されず、関数が次回使用されるときもこの値を使用できます.
なぜjはずっと1なのかと聞かれた.fun 2()という関数を呼び出すたびにjは強制的に0に置かれるからである.
staticの役割:
(1)関数体内のstatic変数の作用範囲は、auto変数とは異なり、この変数のメモリは1回しか割り当てられていないため、その値は次回の呼び出し時に前回の値を維持する.
(2)モジュール内のstaticグローバル変数はモジュール内で使用される関数によってアクセスできるが、モジュール外の他の関数によってアクセスできない.
(3)モジュール内のstatic関数は、このモジュール内の他の関数によってのみ呼び出され、この関数の使用範囲は、宣言されたモジュール内に制限される.
(4)クラス内のstaticメンバー変数はクラス全体が所有し、クラスのすべてのオブジェクトに対して1部のコピーしかない.
(5)クラス内のstaticメンバー関数はクラス全体が所有するものであり,この関数はthisポインタを受信しないため,クラスのstaticメンバー変数にのみアクセスできる.