No. This is not the same as a 2D array. An int** is a pointer to pointers, a 2D array like an int[8][8] is completely different. An int** is what's referred to as a jagged array, it's a number of 1D arrays allocated separately that can be anywhere in memory plus an array of pointers to keep them in order. For example,
Code:
int **a = malloc(sizeof *a * 10);
// At this point, *a is a pointer to 10 pointers to ints
// These pointers don't point anywhere yet, though
for(int i = 0; i < 10; i++)
a[i] = malloc(sizeof **a * 10);
// Now each point to a different memory location of 10 ints
// These are 10 separate, non-contiguous areas of memory
This is not the same as a 2D array.
Code:
int a[8][8];
// a is an array of 64 ints in contiguous memory