0

ポインタを明示的に使用せずにC ++で動的配列を作成することは可能ですか(int*配列の代わりにint配列[])?

すなわち。このようなもの:

int size = 5;
int array[];

array = new int{size};

for (int i = 0; i < size; i++)
{
    array[i];
}
4

5 に答える 5

2

はい、もちろん可能です:

#include <iostream>
int main()
{
    [](int array[] = new int[10]) {
        std::cout << "array = " << array << "\n";
        delete[] array;
    }();
}
于 2012-10-11T21:08:51.983 に答える
0

要するに、違います。コンパイラは配列のサイズを知る必要があるため、c ++でスタック割り当て配列を使用するには、宣言で指定する必要があります。代わりに、 STLVectorクラスを確認することをお勧めします。

于 2012-10-11T21:02:23.237 に答える
0

int array[];必ず (関数またはクラスのスコープで) 自動保存期間を持ち、動的保存期間を持つことはできません。

のようなクラス内でポインターを非表示にすることができますstd::vector<int>

次のようなことができます

int (&array)[5] = reinterpret_cast<int(&)[5]>(*new int[5]);

削除するには:delete [] array;

于 2012-10-11T21:03:53.610 に答える
0

参照を使用してそれを行うことができます:

#include <iostream>
using namespace std;

int main()
{
   int& val = *(new int[2]);
   val = 1;
   *(&val + 1) = 2;

   cout << val << ' ' << *(&val+1)  << '\n';

   delete [] (&val);

   return 0;
}

しかし、ご覧のとおり、これはあまり読みにくく、エラーが発生しやすくなります。最善の策は、単に使用することstd::vectorです。

于 2012-10-11T21:07:46.847 に答える
0

stdいいえ。ただし、ライブラリの動的型を使用できますstd::vector

std::vector配列と非常によく似た動作をする型。

このstd::vectorを見てください。

于 2012-10-11T21:10:46.113 に答える