1
#include <stdio.h>
int g;
void afunc(int x)
{
     g = x; /* this sets the global to whatever x is */
}

int main(void)
{
     g = 10;    /* global g is now 10 */
    afunc(20); /* but this function will set it to 20 */
     printf("%d\n", g); /* so this will print "20" */

     return 0;
}

printfの出力は20ですが、ローカル変数g = 10なので、なぜローカル変数はグローバル変数よりもスコープが広いのでしょうか。

4

3 に答える 3

3

printfの出力は20ですが、ローカル変数g = 10なので、10ではなく20を出力するのはなぜですか。

ローカル変数を変更していません。あなたのラインmain

g = 10;

グローバル変数を変更しています。同様に、関数呼び出しafuncはグローバル変数を変更します。プログラム全体には変数が1つだけgあり、それがグローバル変数です。

于 2012-10-21T12:22:19.853 に答える
3

例で呼び出されるローカル変数はありませんg。グローバルなものだけ。したがって、出力が期待されます。

と呼ばれるローカル変数が必要な場合は、次のことをg試してください。

int main(void)
{
     int g = 10;    /* local g, initialized with 10 */
     ...

上記により、と呼ばれる2つの異なる変数が作成されg、そのうちの1つはでのみ表示されmainます。

于 2012-10-21T12:22:32.467 に答える
1

実際に新しい変数を宣言したようには見えないからです。g=10を参照しました。

実際には新しい変数を定義せず、単にグローバル変数を参照しました。お役に立てれば。

于 2012-10-21T12:29:11.073 に答える