Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;:大小为“variable”的多维数组的类型_C++_Arrays_Types - Fatal编程技术网

C++ C++;:大小为“variable”的多维数组的类型

C++ C++;:大小为“variable”的多维数组的类型,c++,arrays,types,C++,Arrays,Types,我可以运行这个 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 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 a = 5; 
int (*foo)[4][4];
foo = new int [a][4][4];

正如@john正确识别的:


您混淆了指针的2D数组(这就是您编写的)和指向2D数组的指针(这就是您想要的)

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

但这定义了一个指针数组(您实际执行的操作):


@OP在您自己的答案中,您已经找到了正确的类型–指向数组
int(*foo)[4][4]
,但我认为多做一点解释也很有帮助。

这里的旁注是:多维数组,例如
int[4][4]
在本质上是参差不齐的,这可能是您想要的,也可能不是您想要的。这对性能(缓存)有影响,通常您实际上想要一个连续的内存块。例如:
intarr[4*4];int x=arr[i*4+j]
访问元素
arr[i,j]
@sebastianhofmann——在这种形式下,多维数组不是参差不齐的——数据在连续内存中。你对2D数组的指针(这就是你写的)和指向2D数组的指针(这就是你想要的)感到困惑。这是一个很好的答案,除了Geeksforgeks链接。我建议去掉它,你的答案其实并不需要它。
data_type (*var_name)[array_size];
data_type *var_name[array_size];