Pasar una matriz 2D de estructuras

Estoy repartiendo estructuras de tipo tarjeta desde una matriz.

struct card deck[DECKSIZE];  //The deck is an array of cards structures

Estoy usando una matriz 2D. Un conjunto de conjuntos de estructuras de tipo tarjeta

struct card allHands[hands][cards];

Estoy usando esta función pasando el mazo y la matriz como punteros con los parámetros de la matriz. También cambio la ubicación del puntero del mazo para simular que el mazo pierde la carta cuando se pasa al jugador.

void dealHands(struct card *deck, struct card **handArray, int hands, int cards){

    int players;
    int cardCount;
    int passCard = 0;
    struct card * thisDeck;

    thisDeck = deck;

    for(players = 0; players < hands; players++){
        for(cardCount = 0; cardCount < cards; cardCount++){
            handArray[players][cardCount] = thisDeck[passCard];
            passCard++;
        }   
    }
    deck = (deck + passCard);   
}   

Ha pasado mucho tiempo que programo en c, así que creo que así es como se hace el prototipo.

    void dealHands(struct card[], struct card*[], int, int);

Esto es como el esqueleto de mi principal de cómo estoy implementando la función.

int main(int argc, char *argv[])
{
    /* Declare and initialize variables  */

    int hands = atoi(argv[HANDSINPUT]);  //How many players 
    int cards = atoi(argv[CARDSINPUT]);  //How many cards per hand  
    struct card deck[DECKSIZE];  //The deck is an array of cards structures

    struct card allHands[hands][cards];

    //Builds the deck
    //Shuffles deck with a RNG and swapping every card

    int players;
    int cardCount;
    int passCard = 0;   


    dealHands(deck, allHands, hands, cards);


}

Recibo las 2 siguientes declaraciones durante la compilación

advertencia: pasar el argumento 2 de "dealHands" del tipo de puntero incompatible [habilitado por defecto] dealHands (mazo, allHands, manos, cartas); ^

nota: se espera "estructura de tarjeta **" pero el argumento es de tipo "estructura de tarjeta) [(sizetype) (cards)] '' anular dealHands (struct card [], struct card[], int, int); ^

Siempre me equivoco cuando se trata de punteros y matrices cuando necesito llamarlos en una función. Así que no estoy seguro de dónde falla mi lógica. ¿Dónde paso la dirección en lugar del valor o viceversa?

Respuestas a la pregunta(2)

Su respuesta a la pregunta