M[i] будет преобразовываться в обращение к адресу памяти M + i * sizeof(float), и по этому адресу будет читаться/записываться float.float** M;idx = row * W + col, где W - число столбцов в массиве, т.е. длина одной строки. А потом обращаешься к M[idx]. Тут обращение сложнее, но зато создавать/уничтожать массив проще, и он точно будет идти в памяти подряд.
даже значения массив нет
Концепция направлена исключительно на простые запросы.