hello everyone, i have a question about the c++ language, so i will start by a example:
void do_something(int v[]);
why i don't need to specify the vector size in the function parameter?
how does the compiler knows the size of it? (i think that it takes from the function call... right?)
another example:
void do_something2(int v[][5]);
ok ok, i don't have to specify the lines size, but i have to specify the columns size... if the compiler can "take automatically" the lines size (as in the first example), why it don't take the columns too?
(sorry for the bad english, it's not my native language)
thank you.
The function, do_something, doesn't know the size of your array. The first is basically equivalent to this (which works because arrays can decay to pointers):void do_something(int* v);
With the second case, you can only omit one of the dimension-sizes, because to address/look-up the array, the compiler needs to know at least one of the dimension sizes. In other words, the array-look-up logic doesn't need to know the size of one dimension -- a 3d array only needs 2 sizes known, a 4d array only needs 3 sizes known.
e.g. the logic for looking up a value in a 3d array might look like: int Lookup( int* array, int x, int y, int z, int sizeX, int sizeY, int sizeZ )
{
int* value = array + x + y*sizeX + z*sizeY;
return *value;
}