如何通过引用访问动态分配的数组的特定索引?

时间:2014-04-05 14:58:24

标签: c++ reference dynamic-memory-allocation

我想做点什么

int &a = *(new int[10]);
// access all the indices from this reference somehow.

我能做的就是,

int *b = &a;
b[1] = 10;

我可以使用参考吗?如果不是,为什么?

3 个答案:

答案 0 :(得分:3)

您必须使用指针,因为C ++中的数组索引运算符仅针对指针(以及重载该运算符的用户定义类)定义。但是指针可以只是暂时的:

(&a)[1] = 10;

如果您想避免使用指针,那么您只需使用std::arraystd::vector代替:

std::array<int, 10> a;
a[1] = 10;

std::vector<int> v(n);
v[1] = 10;

答案 1 :(得分:1)

是的,你当然可以这样做,但它与谷物相反:预期参考不会用于获取数组的其他元素,而是引用元素。请不要。

答案 2 :(得分:1)

您可以使用参考:

int (&a)[10] = (int (&)[10])*new int[10];

那就是说,你仍然需要删除[]&amp; a,如果你知道数组大小并且它不是很大,你可以创建一个普通的基于堆栈的数组。您无法创建对未知/运行时确定长度的数组的引用。鉴于你也可以索引指针,这是非常有限的实际用途(主要是为了将数组传递给自己绑定对它的引用的模板,通常它们可以隐式访问数组大小)。