2016-07-12 8 views
2
int * array[60]; //creates an array of 60 pointers to an int 
int * array = new int(60); //same thing? 

どちらも同じタイプの配列になりますか?例えば整数へのポインタの配列int * array [60]とint * array = new int(60)の違いです。

最初のものは初期化されておらず、2番目のものは初期化されていますが、正確に2番目のものが作成されているかどうかはわかりません。

+1

2番目のものは配列でもなく、単一の 'int'オブジェクトです。 'new'で' int * 'の配列を作成するには' int ** array = new int [60] 'を見てください。 – zneak

+0

はい、私は今、それが何らかの理由で配列を作成すると思ったことに気付きました。しかし、私はドキュメントを読んで、intコンストラクタの最初のパラメータが値になります。 – Viliami

答えて

10
int * array = new int(60); //same thing? 

いいえ、それらは同じものではありません。 arrayはここではポインタにすぎず、初期化された値60でintを指します。

int * array = new int[60];を意味する場合、arrayは60の整数の配列を指していますが、それらはまだ同じものではありません。 int* array[60]それは(60のポインタの)アレイであることを意味している間だけ宣言として、int* arrayは、それがポインタであることを意味

注意。

#include <iostream> 

int main() { 
    int* foo = new int(60); 
    std::cout << *foo << '\n'; 
    return 0; 
} 
2

をおそらくあなたは、後者の場合は、アレイ、次のプログラムを印刷60ではないことを認識していませんここで

int * array[5]; 

との違いを説明する二つの絵があります

最初の行は、メモリ内の60個のポインタ・ブロックを作成することを考慮し、違いを理解しやすくするために、

debug view

0

:(。配列、すなわちint**int* array[60]ため、それはint*と同じではありませんが、ポインタに崩壊かもしれない)

+0

はい、それは新しいint [5]であるはずです、新しいint(5)は値5のintのポインタを作成するだけです – Viliami

-1

をポインタint型配列使用int * array = new int[5];

​​を作成するには(たとえばメインの中にスタックしている場合はスタック内にありますが)、2番目のブロックはポインタブロックだけです。

どちらも完全に異なるタイプです。たとえば、次のように試してください。

array++; 

最初の行は機能しません。もう1つはOKです。試してみると、

最初の行で最初のポインタを変更し、2番目のポインタで整数に1を追加します(61に変更)。

0

一方は配列を作成し、もう一方は配列を作成しません。

int * array[60]; // Creates an array of 60 integer pointers 
関連する問題