是否可以在不显式使用指针的情况下在 C++ 中创建动态数组(int array[] 而不是 int* array)?
IE。像这样的东西:
int size = 5;
int array[];
array = new int{size};
for (int i = 0; i < size; i++)
{
array[i];
}
是否可以在不显式使用指针的情况下在 C++ 中创建动态数组(int array[] 而不是 int* array)?
IE。像这样的东西:
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类。
int array[];
必须具有自动存储持续时间(在函数或类范围内)并且不能具有动态存储持续时间。
您可以将指针隐藏在类中,例如std::vector<int>
.
你可以做类似的事情
int (&array)[5] = reinterpret_cast<int(&)[5]>(*new int[5]);
删除:delete [] array;
您可以使用参考来做到这一点:
#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
.