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];