Given static 2 Given static 2-D array as follow:
int m[4][6];
How do i access to m[2][4]
without using operator[]?
Given static 2 Given static 2-D array as follow:
int m[4][6];
How do i access to m[2][4]
without using operator[]?
Do this:
*(*(m+2) + 4)
This is what operator []
really do, here array will dacay to pointer.
a brief explaination for this:
in *(m+2)
, m
is used as a prvalue of int(*)[4]
pointing to the firsrt
"row" of m
, then dereferencing m+2
get the reference to the 1D array of the third "row".
Then, this result decay to int*
prvalue again pointing to the first element of the third "row", then dereferencing this_value + 4
, we successfully retrieve the 5th element of the 3rd row, which is the exact result you get by using m[2][4]
.
Sounds like a classical pointer exersice to me.
Try to use the address of m and some pointer arithmetic.
int main(){
int m[4][6];
m[2][4] = 42; // Using [] only for testing
int x = *(*(m + 2) + 4);
printf("%d\n", x);
}