10

Cでは、外部変数が同じコストでその目的を果たすことができる場合の静的ストレージクラスの使用は何ですか. どちらも、実行可能ファイルのデータ セグメント内のストレージ スペースを占有します。

外部変数のスコープがはるかに優れています。外部変数のスコープを特定のファイルにしたい場合は、この変数を他の場所で宣言しません。静的なローカル変数であるグローバル変数には多くの柔軟性があります

また、変数のアドレスがあれば、関数外のローカル静的変数を参照できます。ローカル静的変数のメモリは、関数のスタック フレームではなく、データ セグメントにあります。そのため、独自の機能により、静的ストレージ クラスがテーブルにもたらされます。 .

static に気づいていない微妙な目的があるかどうかを知りたいだけです。

4

6 に答える 6

7

グローバル変数はグローバルなので、どこからでもアクセスできます。

静的ローカル変数にはローカル スコープがあります。これは静的であるため、有効期間はアプリケーションの有効期間全体にわたって実行されますが、ローカル スコープからのみアクセスできます (そのスコープが関数、ブロック、またはファイルであるかどうか)。

于 2013-04-04T10:04:38.670 に答える
1

基本的な違いは、変数のスコープにあります。

1) グローバル変数はプロジェクト全体でグローバルです。プロジェクトに 10 個の異なるファイルがあり、10 個のファイルすべてがグローバル変数にアクセスできるとします (extern の使用方法を参照)。

2) 静的変数/関数は、それが定義されている関数/ファイルで使用できます。プロジェクト内の他のファイルでは使用できません。

ただし、変数の参照を渡すことにより、func2() で静的変数 (func1() で定義) を変更できます。以下の例をご覧ください。

void func2(int *i)
{
    (*i)++;
}

void func1()
{
    static int i;

    i=1;
    printf("%d\n", i);
    func2(&i);
    printf("%d\n", i);  
}

int main()
{
    func1();
    return 0;
}

上記のように、 func1() にはstatic int ifunc2() で直接操作できないものがありますが、変数の参照を渡すと、通常の変数のように変数を操作できます。

それが役に立てば幸い...

于 2013-04-04T10:08:34.527 に答える
0

ローカル変数とグローバル変数の違いは、何よりもまずスコープです。ローカル変数には、それらが定義されているブロック内からのみアクセスできますが、グローバル変数にはどこからでもアクセスできます。したがって、グローバル スコープでは特定の名前を持つ変数を 1 つしか持てませんが、異なる関数では複数のローカル静的変数を持つことができます。

静的グローバル変数と extern 変数の場合: はい、静的グローバル変数は翻訳単位 (つまり、それらが定義されている .c ソース ファイル) に対してローカルです。

したがって、ここでの主な関心事はスコープの概念であり、ストレージはそこから自然に生まれます。

于 2013-04-04T10:05:00.387 に答える
0

ローカル静的変数を使用する必要がある理由はスコープです。したがって、ローカル静的変数を使用すると、定義された関数の外部で参照できないため、バグが発生しやすい状況を回避できます。

于 2013-04-04T10:05:13.160 に答える