如何在多维数组上调用new

自由奔

我正在尝试编译以下代码:

bool **copyBools( bool const * const * const input )
{
    bool retval[4][4] = new bool[4][4];
    for( int i=0; i<4; ++i )
    {
        for( int j=0; j<4; ++j )
        {
            retval[i][j] = input[i][j];
        }
    }
    return retval;
}

但是,它不会编译并给出这些错误。第一个错误bool retval在行上,第二个错误return在行上:

error: array must be initialized with a brace-enclosed initializer
error: cannot convert ‘bool (*)[4]’ to ‘bool**’ 

我的理解是[][]数组与数组是同一回事**这不是真的吗 此代码有什么问题?二维数组调用new的正确方法是什么?为什么我不能将其作为**

legends2k
bool retval[4][4] = new bool[4][4];

返回类型是一个指针,您必须将其分配给一个指针变量而不是数组变量。

我的理解是[] []数组与**是同一回事。这不是真的吗 为什么我不能将其返回为**?

不,因为数组衰减不是递归的当您这样做时new bool[4][4],您将获得bool (*) [4]作为返回的指针(此处只有第一级衰减)。

二维数组调用new的正确方法是什么?

这个

bool (*retval) [4] = new bool[4][4];

应该管用。每个元素都像往常一样被访问retval[i][j],只是retval对于不了解情况的人来说有点奇怪;它是一个指向四个布尔数组的指针。但是,对于下面的替代方法(两个尺寸都丢失了),它更安全,因为编译器可以检查长度,因为它是类型的一部分。但是,第二维也丢失了此方法。如果要保留两个尺寸,请使用std::array<std::array<bool, 4>, 4>std::array方法方法中的警告是,仅当第一维未知时才可以使用它们,而所有其余维在编译时都是已知的。这是用于声明指向数组的指针。即使在编译时未知所有尺寸,也可以使用以下方法。

另一种选择是使用一个指针数组,并用一个布尔数组浸渍该数组中的每个指针。

bool** ptrs = new bool*[4];
for (size_t i = 0; i < 4; ++i)
   ptrs[i] = new bool[4];

这使您可以返回bool**在这里,它new bool*[4]也在第一级衰减并返回一个bool**指针。但是,如果两个维度都不知道,则建议使用(惯用的)方法std::vector

推荐读物: 如何在C ++中使用数组?

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在PHP上调用数组数组

来自分类Dev

如何在ActiveRecord对象上调用范围数组?

来自分类Dev

如何在javascript中的对象数组上调用方法?

来自分类Dev

如何在接口上调用len()?

来自分类Dev

如何在Windows上调用ELF函数

来自分类Dev

Bravia Engine如何在AOSP上调用?

来自分类Dev

如何在Laravel上调用存储过程?

来自分类Dev

如何在ImplicitlyUnwrappedOptional上调用.map()?

来自分类Dev

如何在主线程上调用getLooper()?

来自分类Dev

如何在多个JTextfields上调用`setText`?

来自分类Dev

如何在CSS上调用图片?

来自分类Dev

如何在存根上调用真实方法

来自分类Dev

如何在Kotlin的WeakHashMap上调用“放置”?

来自分类Dev

如何在Xcode上调用SecondViewController?

来自分类Dev

如何在JPanel对象上调用getWidth

来自分类Dev

如何在Windows上调用ELF函数

来自分类Dev

如何在我的课程上调用objectForPrimaryKey

来自分类Dev

如何在多个JTextfields上调用`setText`?

来自分类Dev

如何在GUI线程上调用方法?

来自分类Dev

Haskell如何在Windows上调用ffi

来自分类Dev

如何在子类型上调用函数?

来自分类Dev

如何在linux上调用execve?

来自分类Dev

如何在菜单抽屉上调用片段?

来自分类Dev

如何在redux的动作上调用动作?

来自分类Dev

如何在 JavaScript 中将多维数组填充到多维对象?

来自分类Dev

如何在Twig中设置多维数组?

来自分类Dev

如何在Codeigniter中返回多维数组

来自分类Dev

如何在多维数组中插入列?

来自分类Dev

如何在C中反转多维数组?