Sign in to follow this  
lucaswrk

C++ vector/matrix size question

Recommended Posts

hello everyone, i have a question about the c++ language, so i will start by a example:

[CODE]void do_something(int v[]);[/CODE]

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:

[CODE]void do_something2(int v[][5]);[/CODE]

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. Edited by lucaswrk

Share this post


Link to post
Share on other sites
The function, do_something, doesn't know the size of your array. The first is basically equivalent to this ([i]which works because arrays can decay to pointers[/i]):[code]void do_something(int* v);[/code]
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:
[code]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;
}[/code] Edited by Hodgman

Share this post


Link to post
Share on other sites
so, in an abstract way, it works like this (?):

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

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

[CODE]
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.
[/CODE]

?

thank you.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this