C++のこれら3つの行の違いは何ですか?1つの変数と配列に対する動的ポインタ割り当ての違いは何ですか?
int *p= new int;
int *p= new int[10];
int *p = new int[];
我々はすでに、動的にそれが特異的ポインタ配列のサイズを言及することが必要である理由を、変数pをポインタにメモリを宣言していますか?
C++のこれら3つの行の違いは何ですか?1つの変数と配列に対する動的ポインタ割り当ての違いは何ですか?
int *p= new int;
int *p= new int[10];
int *p = new int[];
我々はすでに、動的にそれが特異的ポインタ配列のサイズを言及することが必要である理由を、変数pをポインタにメモリを宣言していますか?
int *p = new int;
これはタイプint
の単一目的のために十分なメモリを割り当て、ポインタツーint
可変p
でそれへのポインタを格納します。これは、*p
が有効なint
オブジェクトを参照していることを意味します。
int *p = new int[10];
これはタイプint
の10個のオブジェクトのための十分な連続したメモリを割り当て、ポインタツーint
可変p
で最初int
へのポインタを格納します。つまり、p[0]
〜p[9]
は有効なint
オブジェクトを参照しています。
int *p = new int[];
この文は構文的に正しくありません。これは有効なC++ではないため、意味を持ちません。
... why is it required to specifically mention pointer array size?
は、他にどのようにメモリアロケータは、あなたがのための部屋を必要とするどのように多くのint
のことを教えていない場合は割り当てにどのくらいのメモリを知っていることになっていますか?
また、単一オブジェクトの 'new'は単一オブジェクトの' delete'とマッチしなければならず、配列の 'new []'は配列の 'delete []'とマッチしなければならないことに注意してください。 'new []'は、 'delete []'が、(必要ならば)いくつのオブジェクトを破壊して、下にあるメモリブロックを解放するかを知るように配列数を格納します。 –
最後の1つはエラーです: ']'トークンの前に期待されるprimary-expression int * p = new int []; –