Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What's wrong with this array declaration?

Tags:

c++

pointers

I created this array this array inside a function, with the variable MODEL_VERTEX_NUM initialized @ runtime, which, I guess, is the sticking point here.

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

I got the following errors:

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

I realize that when I do:

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

The compiler lets this pass, but I wanna understand what's wrong with the previous declaration.

So, what's wrong with the [][] declaration?

like image 924
andandandand Avatar asked Jan 18 '23 07:01

andandandand


1 Answers

For a two-dimensional array a[X][Y] the compiler needs to know Y to generate code to access the array, so you need to change your code to

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

If you have an array of type T a[X][Y] and want to access a[x][y] that is equivalent to accessing *(((T*)(&a[0][0])) + x*Y + y). As you can see the compiler needs to know Y but not X to generate code for accessing the array.

like image 146
Werner Henze Avatar answered Jan 25 '23 17:01

Werner Henze