スタック上に1つ、ヒープ上に2つの配列を宣言すると、変数名を印刷するときに(gdbで重要な場合)、動作が異なります。配列の変数名がスタックで宣言されていないのはなぜですか?C++?
int array_on_stack[5];
int * array_on_heap = new int[5];
gdbでは、各行のコードをステップ実行し、変数名を印刷して、それぞれのメモリアドレスを取得することを期待しています。
print array_on_stack
print array_on_heap
しかしarray_on_stack
のためには、配列の内容ではなくメモリアドレスを出力します。メモリアドレスを取得するには、コマンドprint &array_on_stack
が必要です。これは、array_on_stack
がポインタではないことを示しています。これら2つの宣言の違いを、メモリアドレスへのアクセス方法とその理由について説明できますか?
のためのgdbで同様の結果が得られます、一つは、配列はポインタだ、とのもの。彼らは別のものです。 – UKMonkey
*これはarray_on_stackがポインタではないことを示しています*あなたは正しいです。配列はポインタではありません。ポインタはポインタであり、配列は配列です。 'int'のように' double'はありません。 – NathanOliver