Archived

This topic is now archived and is closed to further replies.

2d arrays

This topic is 5240 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

lets say there is an array:
 int SomeArray[5][3] = { {1,2,3}, 
                                 {4,5,6},
                                 {7,8,9},
                                 {10,11,12},
                                 {13,14,15} };
does that mean that int SomeArray[0] is holding the values 1,2, and 3 and so on with the other numbers?

Share this post


Link to post
Share on other sites
SomeArray[0][0] (you would have to do it like that) is holding '1'.
SomeArray[0][1] is holding '2'
SomeArray[1][1] is holding '5'
SomeArray[1][2] is holding '6' ...and so on so forth.





An ASCII tetris clone... | AsciiRis

[edited by - Tiffany Smith on August 13, 2003 8:46:37 PM]

Share this post


Link to post
Share on other sites
In this case, SomeArray[0] is actually a pointer to a 3-int array. The compiler will usually generate a warning if you attempt to use SomeArray[0] where an int is expected. You can use it wherever an int array or pointer to int is expected. It can be a source of bugs to forget the second subscript in an array usage such as this.

So, yes, in a sense SomeArray[0] IS holding the numbers 1, 2, and 3. SomeArray[1] would be holding 4, 5, and 6. But something like printf("%d",SomeArray[0]) will probably result in pointer value gibberish, and not the values of the numbers.



Josh
vertexnormal AT linuxmail DOT org

Check out Golem at:
My cheapass website

Share this post


Link to post
Share on other sites
Guest Anonymous Poster
quote:
Original post by VertexNormal
In this case, SomeArray[0] is actually a pointer to a 3-int array.


nope, not for 2d static arrays. its allocated as one chunk.

Share this post


Link to post
Share on other sites
what would SomeArray[1][0] be holding?

tiffany can you please explain to me Why those 2d arrays hold the values they do? or anyone?

so
SomeArray[0][0] (you would have to do it like that) is holding '1'.
SomeArray[0][1] is holding '2'
SomeArray[1][1] is holding '5'
SomeArray[1][2] is holding '6' ...and so on so forth.

why do those things hold the things that they do? i think the thing that I'm not understanding is how the array values are accessed

[edited by - TheOne1 on August 13, 2003 9:03:10 PM]

Share this post


Link to post
Share on other sites
quote:
Original post by TheOne1
what would SomeArray[1][0] be holding?

tiffany can you please explain to me Why those 2d arrays hold the values they do? or anyone?

so
SomeArray[0][0] (you would have to do it like that) is holding '1'.
SomeArray[0][1] is holding '2'
SomeArray[1][1] is holding '5'
SomeArray[1][2] is holding '6' ...and so on so forth.

why do those things hold the things that they do? i think the thing that I'm not understanding is how the array values are accessed



SomeArray[1][0] would be holding 4
there is a really easy way to figure it out...
here ...

#include <stdio.h>
#include <conio.h>

int main()
{
int array[5][3] ={ {1,2,3},{4,5,6},{7,8,9}, {10,11,12}, {13,14,15} };
printf("%d", (array[1][0]));

getch();
return 0;
}


Compile this and play around with the values in the printf.

i think the really confusing part about arrays is that all array subscripts start with a 0, imo thats all that makes it confusing.

int SomeArray[5][3] = { {1,2,3}, {4,5,6}, {7,8,9}, {10,11,12}, {13,14,15} };

this part {1,2,3} is SomeArray[0] because its the first array of your five.

SomeArray[0][0] would print 1 because 1 is the fisrt number in your first array of three.

{4,5,6} is SomeArray[1] because its the second array of your five.

SomeArray[1][0] would print 4 because 4 is the first number in your second array of three.

does that make sense?

An ASCII tetris clone... | AsciiRis

[edited by - Tiffany Smith on August 13, 2003 9:29:32 PM]

Share this post


Link to post
Share on other sites
quote:
Original post by Anonymous Poster
quote:
Original post by VertexNormal
In this case, SomeArray[0] is actually a pointer to a 3-int array.


nope, not for 2d static arrays. its allocated as one chunk.




int SomeArray[5][3]={
{1,2,3}, {4,5,6},{7,8,9},{10,11,12},{13,14,15}
};

printf("Somearray[0]: %d\n", SomeArray[0] );



Messages upon compilation:
main.cpp: In function 'int main(int, char**)'
main.cpp:210:warning: int format, pointer arg (arg 2)

I know it is allocated as one chunk, but conceptually, SomeArray[0] is a pointer to a 3-int array, and can be used wherever a pointer to a 3-int array is expected. Suffice it to say that the compiler does not like left-out subscripts.


Josh
vertexnormal AT linuxmail DOT org

Check out Golem at:
My cheapass website

[edited by - VertexNormal on August 13, 2003 9:32:22 PM]

Share this post


Link to post
Share on other sites
Thank you Tiffany! I now see the light!

edit:
but i might have some questions later on, thanks for your help

[edited by - TheOne1 on August 13, 2003 10:36:23 PM]

Share this post


Link to post
Share on other sites
array notation in C is simply shorthand for pointer arithmatic ...

here is a pointer I will use to access a dynamically allocated chunk of memory ...

int *myBlock = new int[9];

and here is a pointer to access an array

int myArray[9];

these notations are equal:

*(myBlock) and myArray[0]

these are also equal

*(myBlock + 5) and myArray[5]

and

*(myBlock + 10) and myArray[10]

starting to see a connection ...

now let''s look at 2 dimensional arrays ...

int myArray2D[3][3];

now all 3 of my blocks have enough memory to hold 9 ints ... and here is how the 2D array acts in terms of pointer arithmatic and 1D array symantics ...

myArray2D[1][2] is like myArray[1 * 3 + 2] and *(myBlock + (1 * 3 + 2))

another example ...

myArray2D[3][1] is like myArray[3 * 3 + 1] and *(myBlock + (3 * 3 + 1))

...

here is the general case for 2d arrays

if the array is created as array[X][Y] ..

and accessed as arrayLink

Share this post


Link to post
Share on other sites