I thought I was OK at C style arrays, apparently not. I can't figure this out.
Say I declare a function
void RotateMatrix(int ** matrix, int n)
{
auto x = matrix[0][0];
}
(assume matrix is square). Driving it from the main function
void main()
{
int matrix[4][4] =
{
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12},
{13, 14, 15, 16}
};
RotateMatrix((int**) matrix, 4);
}
Basically, matrix[0][1] results in a buffer overflow. Debugging it, matrix[0][0] tries to go to the address 0x0000000200000001, a combination of the first 8 bytes in the array, presumably as int is 4 bytes and int* is 8 bytes, and int** is a pointer to a pointer of ints, hence it treats the first 2 matrix entries as int*. However, this confused me as answers like bobobobo's on How to pass a multidimensional array to a function in C and C++ seems to show you can use the int** approach. I'm confused. I've seen other SO posts say the same thing, so why does it work for them?
I thought matrix[0][0] it would do matrix[0]'s address plus offset 0 * sizeof(int) (which would still be the first element)