2017-09-17 8 views
-6
int main() 
{ 
    int *y = new int(5); 
    cout << "y = " << y << " &y = " << &y << " *y = " << *y << endl; 
    int *p = new int[5]; 
    cout << "p = " << p << " &p = " << &p << " *p =" << *p << endl; 
} 

1 []を使用して使用される別の1()は、さまざまなものだし、それがどのように動作しますか?誰かが私に説明するのを助けることができますか?ありがとう!新しいint型()と新しいint型betwee違いは何です[]

+1

あなたのC++の本はこれについて何と言っていますか? –

+0

ありがとう!!それは私をたくさん助けます。 int * y = new int(5)は、値5が* yに与えられることを意味します。しかし、int [5]は、5の整数のスペースを作ることを意味します。 – Jay

答えて

0

std::coutには非常に多くのものが出力されますが、そのほとんどは関係ありません。

int(5)が5で初期化単一の整数を意味するので、出力

4 20 

だからsizeofintの大きさをもたらします

std::cout << sizeof(int(5)) << " " << sizeof(int[5]) << "\n"; 

を試してみてください。

一方、int[5]は5つの整数の配列なので、sizeof5*sizeof(int)です。

つ以上備考:newと古き良きアレイを作成

  • は間違いなく初心者は控えるべきものです。動的にサイズ変更可能なストレージが必要な場合は、std::vectorを使用してください。スピードパニックはありません。
  • using namespace std;を入力すると、コードが読みやすくなり、ライブラリの内容とは明確に区別されます。std::と入力するだけです。
+0

もっと深く理解してください! – Jay

+0

"速度ペナルティはありません*" - 本当ではありません。速度は 'std :: vector'で*少し遅くなります。 'new int [5]'はメモリを割り当てますが、それを埋めません。 'ベクトル(5)'(または 'vector.resize(5)')はメモリを割り当て、ゼロ初期化します。また、生ポインタ上の 'operator []'はポインタとオフセットの単純逆参照ですが、 'std :: vector'の' operator [] 'は呼び出しスタックを操作する関数呼び出しです。速度の差はごくわずかですが、存在します。 –

+0

@RemyLebeauコンパイラは演算子の呼び出しをインライン展開します。 – DrSvanHay

0
int *y = new int(5) 

これは、単一intを割り当て、5にその値を設定し、次に割り当てint点にyを割り当てます。

int *p = new int[5] 

これは、値が最初に定義されていません5つのint Sの配列を割り当て、割り当てられた配列の最初int点にpを割り当てます。

関連する問題