Latest web development tutorials

Cのスコープ規則

プログラミングの任意の種類は、スコープがアクセスすることはできません可変領域を超えて存在するプログラム可変領域で定義されています。 C言語、あなたは変数を宣言することができる3つの場所があります:

  1. ブロック内のローカル変数または
  2. 関数外のすべてのグローバル変数
  3. 関数のパラメータは、パラメータ・フォームを定義します

のは、ローカル変数、 グローバル変数とパラメータが何であるかを見てみましょう。

ローカル変数

変数はローカル変数と呼ばれる関数やブロック内で宣言します。 彼らは声明の内部関数やコードのブロックで使用することができます。 関数外のローカル変数は不明です。 次のローカル変数を使用する例です。 ここで、すべての変数a、bおよびcは、ローカル変数のmain()関数です。

#include <stdio.h>
 
int main ()
{
  /* 局部变量声明 */
  int a, b;
  int c;
 
  /* 实际初始化 */
  a = 10;
  b = 20;
  c = a + b;
 
  printf ("value of a = %d, b = %d and c = %d\n", a, b, c);
 
  return 0;
}

グローバル変数

グローバル変数は、通常、プログラムの先頭で、外部関数で定義されています。 アプリケーションのライフサイクルを通じたグローバル変数は、グローバル変数にアクセスすることができ、任意の内部機能で有効です。

グローバル変数は任意の関数によってアクセスすることができます。 つまり、グローバル変数の宣言の後には、プログラム全体で利用可能です。 以下は、グローバルとローカル変数の例の使用であります:

#include <stdio.h>
 
/* 全局变量声明 */
int g;
 
int main ()
{
  /* 局部变量声明 */
  int a, b;
 
  /* 实际初始化 */
  a = 10;
  b = 20;
  g = a + b;
 
  printf ("value of a = %d, b = %d and g = %d\n", a, b, g);
 
  return 0;
}

プログラムでは、ローカル変数とグローバル変数が同じにすることができますが、関数の内部で、ローカル変数はグローバル変数の値を上書きします。 次に例を示します。

#include <stdio.h>
 
/* 全局变量声明 */
int g = 20;
 
int main ()
{
  /* 局部变量声明 */
  int g = 10;
 
  printf ("value of g = %d\n",  g);
 
  return 0;
}

上記のコードはコンパイルされ、実行されると、次の結果を生成します。

value of g = 10

仮パラメータ

関数のパラメータは、仮パラメータは、関数内のローカル変数として扱われ、それらはグローバル変数をオーバーライドする優先権を与えます。 次に例を示します。

#include <stdio.h>
 
/* 全局变量声明 */
int a = 20;
 
int main ()
{
  /* 在主函数中的局部变量声明 */
  int a = 10;
  int b = 20;
  int c = 0;
  int sum(int, int);

  printf ("value of a in main() = %d\n",  a);
  c = sum( a, b);
  printf ("value of c in main() = %d\n",  c);

  return 0;
}

/* 添加两个整数的函数 */
int sum(int a, int b)
{
    printf ("value of a in sum() = %d\n",  a);
    printf ("value of b in sum() = %d\n",  b);

    return a + b;
}

上記のコードはコンパイルされ、実行されると、次の結果を生成します。

value of a in main() = 10
value of a in sum() = 10
value of b in sum() = 20
value of c in main() = 30

ローカルおよびグローバル変数を初期化します

ローカル変数が定義されている場合、システムは、あなたがそれを自分で初期化する必要があり、初期化されません。 あなたはグローバル変数を定義する場合、以下のように、システムが自動的にそれを初期化します:

数据类型初始化默认值
int 0
char '\0'
float 0
double 0
pointer NULL

正しく初期化された変数は初期化されていない変数は、いくつかのガベージ値が既にメモリの場所で使用可能な原因となるので、そうでない場合は、プログラムが予期しない結果が生じる可能性があり、良いプログラミングの練習です。