Вы пытаетесь инициализировать массив скалярным значением (указатель возвращается функцией malloc). Если вы действительно хотите, чтобы матрица указателей 10 на 10 указывала на структуры (а не матрица 10 на 10 структур), вам не нужен malloc:
//Statically allocated 10x10 matrix of pointers, no need for malloc.
struct woot *what[10][10];
Чтобы назначить указатель на ячейку в этой матрице:
struct woot oneSpecificWoot;
what[1][2] = &oneSpecificWoot;
Если это действительно, действительно то, что вы хотите, вы можете динамически создать кучу вутов и заполнить их. Примерно так:
int i, j;
for(i=0; i<10; i++) {
for(j=0; j<10; j++) {
what[i][j] = malloc(sizeof(struct woot));
//Of course, you should always test the return value of malloc to make sure
// it's not NULL.
}
}
Но если вы собираетесь это сделать, вы можете просто статически распределить сами woot
:
//A 10x10 matrix of woots, no malloc required.
struct woot what[10][10];
Первый случай (двумерный массив указателей) был бы более вероятен, если woots создаются где-то в другом месте, и вы просто хотите, чтобы ссылки на них располагались в сетке или, возможно, если вы не знаете Размеры сетки во время компиляции. Но в вашем коде вы используете malloc для создания их фиксированного числа, так что вы можете просто сделать так, чтобы компилятор назначил их статически.