Jump to content

  • Log In with Google      Sign In   
  • Create Account


C++ vector/matrix size question


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
3 replies to this topic

#1 lucaswrk   Members   -  Reputation: 105

Like
0Likes
Like

Posted 09 August 2012 - 09:20 PM

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, 09 August 2012 - 09:25 PM.


Sponsor:

#2 Hodgman   Moderators   -  Reputation: 27668

Like
2Likes
Like

Posted 09 August 2012 - 09:57 PM

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, 09 August 2012 - 10:03 PM.


#3 lucaswrk   Members   -  Reputation: 105

Like
0Likes
Like

Posted 10 August 2012 - 05:32 AM

so, in an abstract way, it works like this (?):

int array[5][5];

0x0001
0x0002
0x0003
0x0004
0x0005
0x0006
0x0007
0x0008
0x0009
0x000A
0x000B
0x000C
0x000D
...

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.

#4 iMalc   Crossbones+   -  Reputation: 2259

Like
0Likes
Like

Posted 10 August 2012 - 11:41 PM

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




Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS