Passing ein 2D-Array von Strukturen

Im Austeilen von Kartentypstrukturen aus einem Array.

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

Im mit einem 2D-Array. Ein Array von Arrays von kartentypischen Strukturen

struct card allHands[hands][cards];

Verwenden Sie diese Funktion, um das Deck und das Array als Zeiger mit den Parametern des Arrays zu übergeben. Ich ändere auch die Position des Deckzeigers, um zu simulieren, dass das Deck die Karte verliert, wenn sie an den Spieler weitergegeben wird.

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);   
}   

Ist es eine Weile her, dass ich in c programmiere, also denke ich, dass Sie den Prototyp so machen?

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

Dies ist wie das Skelett meiner wichtigsten, wie ich die Funktion implementiere.

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);


}

Ich erhalte die folgenden 2 Anweisungen während der Kompilierung

warning: Übergeben von Argument 2 von 'dealHands' von inkompatiblem Zeigertyp [standardmäßig aktiviert] dealHands (Deck, allHands, Hände, Karten); ^

note: Erwartet wird 'struct card **', aber das Argument ist vom Typ 'struct card ) [(Größentyp) (Karten)] ’void dealHands (Strukturkarte [], Strukturkarte [], int, int); ^

Ich vermassle immer, wenn es um Zeiger und Arrays geht, wenn ich sie in einer Funktion aufrufen muss. Ich bin mir also nicht sicher, wo meine Logik fehlerhaft ist. Wo übergebe ich die Adresse und nicht den Wert oder umgekehrt?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage