• Advertisement
Sign in to follow this  

C++ vector/matrix size question

This topic is 1992 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

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. 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 (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;
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=#006400]5];

[color=#006400] 0x0002
[color=#006400] 0x0003
[color=#006400] 0x0004
[color=#006400] 0x0005
[color=#006400] 0x0006
[color=#006400] 0x0008
[color=#006400] 0x0009
[color=#006400] 0x000A
[color=#006400] 0x000B
[color=#006400] 0x000C

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.

Share this post

Link to post
Share on other sites
Qrrays are indexed from zero, and [5] means 5 elements total, i.e. 0 .. 4.

Share this post

Link to post
Share on other sites
Sign in to follow this  

  • Advertisement