Статические массивы НЕ являются указателями на указатели - весь массив представляет собой огромный массив данных размером один и адресуется одним указателем, а именно указателем на базу массива.Следовательно,
tp->array = (float **) data;
неверно, потому что вы разыменовываете число внутри массива.(Тот факт, что вам нужно было также привести к приведению, должен был поднять красный флаг, поскольку массивы неявно преобразуются в соответствующие типы указателей.)
Вот почему общая фраза «массивы - это просто указатели» неверна;это наполовину верно для одномерных массивов, но полностью неверно для многомерных массивов.Если вам нужно использовать два индекса, преобразуйте один индекс в индекс столбца строки, умножив строку на размер строки, затем добавив столбец и индексировав в массив указатель.