Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

グローバル変数と静的変数がC/C ++でデフォルト値に初期化されるのはなぜですか?


グローバル変数と静的変数は、CまたはC ++標準であり、コンパイル時にゼロで値を自由に割り当てることができるため、デフォルト値に初期化されます。静的変数とグローバル変数はどちらも、生成されたオブジェクトコードと同じように動作します。これらの変数は.bssファイルに割り当てられ、ロード時に変数に割り当てられた定数を取得してメモリを割り当てます。

以下は、グローバル変数と静的変数の例です。

#include <stdio.h>
int a;
static int b;
int main() {
   int x;
   static int y;
   int z = 28;
   printf("The default value of global variable a : %d", a);
   printf("\nThe default value of global static variable b : %d", b);
   printf("\nThe default value of local variable x : %d", x);
   printf("\nThe default value of local static variable y : %d", y);
   printf("\nThe value of local variable z : %d", z);
   return 0;
}

出力

The default value of global variable a : 0
The default value of global static variable b : 0
The default value of local variable x : 0
The default value of local static variable y : 0
The value of local variable z : 28

上記のプログラムでは、グローバル変数はmain()関数の外部で宣言されており、そのうちの1つは静的変数です。 3つのローカル変数が宣言され、変数zも初期化されます。

int a;
static int b;
….
int x;
static int y;
int z = 28;

デフォルト値が出力されます。

printf("The default value of global variable a : %d", a);
printf("\nThe default value of global static variable b : %d", b);
printf("\nThe default value of local variable x : %d", x);
printf("\nThe default value of local static variable y : %d", y);
printf("\nThe value of local variable z : %d", z);

  1. C ++ローカル変数とグローバル変数はデフォルトでどのように初期化されますか?

    以下は、ローカル変数とグローバル変数の両方で同じです。基本的に、変数を宣言するときはいつでも、特に指定しない限り、コンパイラーはデフォルトのコンストラクターを呼び出します。 言語レベルのタイプ(例:pointers、int、float、boolなど) defaultコンストラクタはまったく何もせず、宣言されたときにメモリをそのまま残します。これは、通常、以前にそのメモリに何があったのか、あるいはメモリがどこから来たのかさえわからないため、ほとんど何でもかまいません。 コンストラクターを持たないクラスを作成する場合、コンパイラーは、各メンバー/変数のコンストラクターを呼び出すだけのクラスを作成し

  2. Javaでは、インターフェイス変数はデフォルトで静的で最終的なものですが、なぜですか?

    インターフェースは、どのように実装すべきかではなく、動作のプロトコルを定義します。インターフェースを実装するクラスは、そのインターフェースによって定義されたプロトコルに準拠します。 Javaインターフェースはそれ自体でインスタンス化できないため、インターフェース変数は静的です。変数の値は、インスタンスが存在しない静的コンテキストで割り当てる必要があります。 最後の修飾子は、インターフェース変数に割り当てられた値が、再割り当てできない真の定数であることを保証します。つまり、インターフェースは定数のみを宣言でき、インスタンス変数は宣言できません。 テンプレート: interface inte