不带指针的动态数组 C++

dynamic array c++ without pointer

本文关键字:数组 C++ 动态 指针      更新时间:2023-10-16

是否可以在不使用指针的情况下在 c++ 中创建动态数组(int array[] 而不是 int* 数组)?

即像这样:

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

是的,当然,这是可能的:

#include <iostream>
int main()
{
    [](int array[] = new int[10]) {
        std::cout << "array = " << array << "n";
        delete[] array;
    }();
}

简而言之,没有。编译器需要知道数组的大小,因此要在 c++ 中使用堆栈分配的数组,必须在声明中指定它。我建议你看看 STL Vector 类。

您可以使用引用来执行此操作:

#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

不可以,但您可以使用库中std动态类型,例如 std::vector

该类型std::vector与数组非常相似。

看看这个std::vector。

int array[];必须具有自动存储持续时间(在函数或类范围内),并且不能具有动态存储持续时间。

您可以将指针隐藏在类中,例如 std::vector<int>

你可以做类似的事情

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

删除:delete [] array;