2017-01-11 1 views
0

デフォルト値は何ですか?変数は初期化されていないときに割り当てられますか? 下のコードでは、私は変数を初期化していません - カウントとjしかし、私は異なる値を得ています。すべての変数にデフォルト値0を割り当てるわけではありませんか?理解できません。C++の変数の初期値が異なる

#include<iostream> 
#include<sstream> 
using namespace std; 

    int main() 
    { 
    char str[] ("Hello World!!!"); 
    char *p; 
    int i; 
    int count; 
    int j; 

    cout << "count is:" << count << endl; 
    cout <<"Value of j is " << j <<endl; 

    p=str; 

    for (i=0;i<20;i++){ 
     cout << *p; 
     p++; 
    } 

    cout << "Length of string is:" << count <<endl; 

    } 

O/P

数は次のとおりです。Jの4198400 価値がある:1 のHello World! 文字列の長さは、4198400

+1

は、「すべての変数はデフォルト値ゼロが割り当てられていないのでしょうか?」いいえ、彼らはしません。なぜ彼らはそうすべきだと思いますか? –

答えて

1

です。静的変数はゼロで初期化されていますが、非静的変数は初期化されておらず、変数の場所のメモリに格納されています。

変数がゼロで初期化されない理由は、変数が初期化されるコストがかかり、C++(およびC)が使用しないものに対して支払いを行わない高性能言語であるためです。この初期化を実行しないでください。

Staticsは自由に初期化することができ、したがってゼロ初期化されます。これは、C++でこれがこのように動作する理由の1つです。なぜなら、Cのように動作し、C++はCの次の反復として考えられていたため、多くの同じ原則が保持されています。

これは、実際にはスコット・マイヤーズの話の冒頭で覆われている:"The last thing D needs"

int x;   // x = uninitialized 
int x;   // <-- in global scope: x = 0 
static int x;  // x = 0 
int* x = new int; // *x = uninitialized 
+0

これはかなりクリアされました。ありがとうございました! – Aisha

関連する問題