Is it possible to convert a single dimensional array into a two dimensional array?
i first tought that will be very easy, just set the pointer of the 2D array to the beginning of the 1D array like this:
int foo[] = {1,2,3,4,5,6};
int bla[2][3] = foo;
because i can easily create an two dimensional array like this:
int bla[2][3] = {1,2,3,4,5,6};
so the question is now, is there a way to convert it via the pointer?
You can't initialise an int bla[2][3]
with an int*
(what foo
becomes in that context).
You can achieve that effect by declaring a pointer to arrays of int
,
int (*bla)[3] = (int (*)[3])&foo[0];
but be sure that the dimensions actually match, or havoc will ensue.
I know you specificed pointers... but it looks like you're just trying to have the data from an array stored in a 2D array. So how about just memcpy()
the contents from the 1 dimensional array to the two dimensional array?
int i, j;
int foo[] = {1, 2, 3, 4, 5, 6};
int bla[2][3];
memcpy(bla, foo, 6 * sizeof(int));
for(i=0; i<2; i++)
for(j=0; j<3; j++)
printf("bla[%d][%d] = %d\n",i,j,bla[i][j]);
yields:
bla[0][0] = 1
bla[0][1] = 2
bla[0][2] = 3
bla[1][0] = 4
bla[1][1] = 5
bla[1][2] = 6
That's all your going for, right?
int (*blah)[3] = (int (*)[3]) foo; // cast is required
for (i = 0; i < 2; i++)
for (j = 0; j < 3; j++)
printf("blah[%d][%d] = %d\n", i, j, blah[i][j]);
Note that this doesn't convert foo
from a 1D to a 2D array; this just allows you to access the contents of foo
as though it were a 2D array.
So why does this work?
First of all, remember that a subscript expression a[i]
is interpreted as *(a + i)
; we find the address of the i
'th element after a
and dereference the result. So blah[i]
is equivalent to *(blah + i)
; we find the address of the i
'th 3-element array of int
following blah
and dereference the result, so the type of blah[i]
is int [3]
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With