【问题标题】:C++: Type of multidimensional array with `variable` sizeC ++:具有“可变”大小的多维数组类型
【发布时间】:2021-02-26 18:44:40
【问题描述】:

我可以运行这个

int a = 5; 
auto foo = new int [a][4][4];

但是当我尝试这个时:

int a = 5; 
int * foo[4][4];
foo = new int [a][4][4];

我得到了错误

error: incompatible types in assignment of ‘int (*)[4][4]’ to ‘int* [4][4]’

问题

我必须为foo 指定什么类型?

编辑: 目标是拥有一块内存,而不是一组指针。

【问题讨论】:

  • 这里附带说明:多维数组,例如int[4][4] 本质上是参差不齐的,这可能是也可能不是您想要的 这对性能(缓存)有影响,通常您实际上想要一个连续的内存块。例如:int arr[4*4]; int x = arr[i*4 + j] 访问元素 arr[i,j]
  • @SebastianHoffmann -- 在这种形式中,多维数组不是参差不齐的 -- 数据位于连续内存中。 See this
  • 你在一个二维指针数组(这就是你写的)和一个指向二维数组的指针(这就是你想要的)之间感到困惑。

标签: c++ arrays types


【解决方案1】:

错误信息有点混乱,因为它没有说明变量名。

这行得通:

int a = 5; 
int (*foo)[4][4];
foo = new int [a][4][4];

【讨论】:

    【解决方案2】:

    正如@john 正确识别的那样:

    您在 2D 指针数组(这就是您编写的)和指向 2D 数组的指针(这就是您想要的)之间感到困惑。

    那么指向数组的指针和指针数组有什么区别。定义指向数组的指针的正确语法(您尝试执行的操作):

    data_type (*var_name)[array_size];
    

    但这定义了一个指针数组(你实际上做了什么):

    data_type *var_name[array_size];
    

    @OP 在您自己的回答中,您已经发现正确的类型应该是什么——指向数组 int (*foo)[4][4] 的指针,但我认为多做一点解释也很有帮助。

    【讨论】:

    • 这是一个很好的答案,except 用于 geeksforgeeks 链接。我建议删除它,你的答案并不需要它。
    猜你喜欢
    • 2012-07-17
    • 1970-01-01
    • 1970-01-01
    • 2014-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-31
    相关资源
    最近更新 更多