While it's laid out the same in memory, a pointer to a multidimensional array is different than a pointer to a flat array. The compiler has to convert the [][] index to a flat array index for any multidimensional arrays. Can't mix the two or the distinction for the compiler is lost. You can either use all flat arrays:
static int dataSet00[2] = {0,1};
static int dataSet01[2] = {2,3};
static int * dataSet0[2] = {dataSet00, dataSet01};
static int dataSet10[2] = {4, 5};
static int dataSet11[2] = {6, 7};
static int * dataSet1[2] = {dataSet10, dataSet11};
static int ** dataSets[2] = {dataSet0, dataSet1};
or one big multidimensional array:
static int dataSets[2][2][2] = {{{0,1},{2,3}},{{4,5},{6,7}}};
but not a combination of the two unless you clue the compiler in by declaring a special datatype per Jon's suggestion.