如何使用`new`指针指向数组

时间:2017-02-16 20:44:06

标签: c++

#define N 10
int (*p)[N] = new int[N];

// or

typedef int TenInts[N];
TenInts *p = new TenInts;

这是C ++语言根本不允许的吗?有没有解决方法? (std::vector除外,因为我需要的是一个具有已知编译时大小的动态分配数组)\

我需要new,因为我将静态数组放在使用new的模板中,模板接受泛型类型T。考虑template<typename T> void f() {T *t = new T;},我希望T成为静态数组。

5 个答案:

答案 0 :(得分:1)

你想要

int *p = new int[N];

您无法在编译时指定要动态分配的数组的大小。你为什么要这样做呢

答案 1 :(得分:1)

  

因为我只需要一个具有已知编译时大小的动态分配数组

在这种情况下,您无需使用new

只需使用

#define N 10
std::array<int,N> p;

答案 2 :(得分:1)

你不能使用

int (*p)[N] = new int[N];

但是,您可以使用:

int (*p)[N] = new int[1][N];

答案 3 :(得分:0)

也许这就是你想要的。

#include <array>
constexpr size_t N = 10;
auto * ptr = new std::array<int, N>();

这允许您使用new在运行时创建一个编译时常量大小的数组。

编辑:我假设,当您说“我的模板使用new”时,您的意思是new,而不是new[]。这意味着您的模板最终会调用delete而不是delete[]

答案 4 :(得分:0)

你可以写:

int (*p)[N] = new int[1][N];

或如果您想要多行,请用更大的数字替换1