这个数组声明有什么问题?

时间:2011-11-14 22:36:59

标签: c++ pointers

我在函数中创建了这个数组,并且变量MODEL_VERTEX_NUM初始化为@ runtime,我猜这是这里的关键点。

loat model_vertices [][]= new float [MODEL_VERTEX_NUM][3];

我收到了以下错误:

1>.\GLUI_TEMPLATE.cpp(119) : error C2087: 'model_vertices' : missing subscript
1>.\GLUI_TEMPLATE.cpp(119) : error C2440: 'initializing' : cannot convert from 'float (*)[3]' to 'float [][1]'

当我这样做时,我意识到:

float model_vertices *[]= new float [MODEL_VERTEX_NUM][3];

编译器允许这个传递,但我想了解上一个声明的错误。

那么,[][]声明出了什么问题?

1 个答案:

答案 0 :(得分:8)

对于二维数组a [X] [Y],编译器需要知道Y来生成访问数组的代码,因此需要将代码更改为

float (*model_vertices) [3]= new float [2][3];

如果你有一个T a [X] [Y]类型的数组,并想要访问[x] [y],这相当于访问(((T )(& a [0] [0]))+ x * Y + y)。正如您所看到的,编译器需要知道Y而不是X来生成用于访问数组的代码。