C++ vector/matrix size question

Started by
2 comments, last by iMalc 11 years, 8 months ago
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.
Advertisement
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;
}
so, in an abstract way, it works like this (?):

int array[[color=#a52a2a]5][[color=#006400]5];

[color=#a52a2a]0x0001
[color=#006400] 0x0002
[color=#006400] 0x0003
[color=#006400] 0x0004
[color=#006400] 0x0005
[color=#006400] 0x0006
[color=#a52a2a]0x0007
[color=#006400] 0x0008
[color=#006400] 0x0009
[color=#006400] 0x000A
[color=#006400] 0x000B
[color=#006400] 0x000C
[color=#a52a2a]0x000D
[color=#006400]...


int* value = array+1..5 //for looking up a column value from line 1
int* value = array+6+1..5 //for looking up a column value from line 2
//and so on.


?

thank you.
Qrrays are indexed from zero, and [5] means 5 elements total, i.e. 0 .. 4.
"In order to understand recursion, you must first understand recursion."
My website dedicated to sorting algorithms

This topic is closed to new replies.

Advertisement