关于指针和数组,我有一个特殊情况。
我该如何在堆上分配一个固定大小的(自动)数组?让我们直接看代码以了解我的问题:
typedef int ArrayOf10Ints[10];
int f()
{
ArrayOf10Ints * p = new ArrayOf10Ints; // Error: cannot initialize a variable of type 'ArrayOf10Ints *'
// (aka 'int (*)[10]') with an rvalue of type 'int *'
ArrayOf10Ints * q = new ArrayOf10Ints[1] // OK: allocates space for 10 ints
delete q; // Warning: use delete []
}
为什么分配表达式
p
不起作用?为什么rvalue是一个int*
而不是一个ArrayOf10Ints*
?为什么q
可以工作?注意:我的目标是理解分配
p
和q
的意外行为。正如其他人指出的那样,有许多直接的方法来解决这个问题。例如,在我的情况下,我使用指针来表示数组是可选的——它可能存在也可能不存在——所以我会这样做:boost::optional<std::array<int, 10> > optional_array;
p
分配内存时,出现错误提示“无法将'int*'转换为'int (*) [10]'进行初始化”。由于你定义了类型为ArrayOfTenInts
,它是指向由10个整数(40位数据类型)组成的内存区域的指针,因此类型为int*
。此外,这个链接可能会有帮助:https://dev59.com/Tm855IYBdhLWcg3wHwiH。 - Polbstd::array<int,10>
。 - πάντα ῥεῖ