если вы передаете массив функции, вы должны указать размер внутреннего массива, в вашем случае вместо void setFirst(card_t *cards[][])
вы должны указать void setFirst(card_t *cards[][5])
.
Почему нужно указывать его, а не размер первого измерения?
Так как cards - это массив массив указателей card_t, если вы хотите получить карты [1] [0], компилятору нужно будет знать, сколько добавить к указателю cards
- объявлены карты: card_t *cards[5][4]
потребуется добавить 4 * sizeof(*card_t)
, чтобы попасть на карты [1] [0], но если карты объявлены: card_t *cards[5][5]
, то для добавления на карты [1] [0] потребуется добавить 5 * sizeof(*card_t)
.