I have the following code snippet:
char board[3][3] = { {\'1\',\'2\',\'3\'}, {\'4\',\'5\',\'6\'},
Of course this will print the same address. Think about 2D arrays like this for a minute,
int **ptr;
The address *ptr does equal &(**ptr).
*ptr
&(**ptr)
Because basically, that's what your code is doing.
and remember that in memory, 2D arrays will be mapped linearly.