一例staticの役割を理解する


staticキーワードはC言語で非常に重要です.そのため面接では、面接官がこれを持って被面接者を受験することもよくあります.このキーワードの役割を例に挙げてみましょう.
#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メンバー変数にのみアクセスできる.