簡體   English   中英

在C的結構中交換兩個數組元素

[英]Swapping two Array elements in a Struct in C

如果你們願意,我可以發布整個代碼,但這是我問題的本質:

typedef struct
{
    CardT cards[DECK_SIZE];
    int count;
}DeckT;

void shuffleDeck(DeckT *deck){
   int k=50;
   DeckT *randCard = deck;
   DeckT *startCard = deck;

   while (k>0){
    int r = k % 25;
    int i = 0;
    for(i=0; i < r; i++, randCard++){
            printf("%i %i",i,r);
    }

    CardT A;    //do I declare A to be a Card Struc or a pointer to the array of cards?
    A = *randCard;                     //this is where my program locks up.
    *randCard = *startCard;            //swapping pointers seems pointless [hehe]
    *startCard = A;       

    printf(" yo yo yo shuffle\n");   //doesn't print this line at all, locks up before
    k--;
    *startCard++;
    }

我知道我需要交換實際元素而不是指針,但是我不確定如何去做。 該函數的基本流程是聲明兩個指向我的牌組的指針,這些指針指向紙牌數組[我需要指定嗎?],然后根據k%25交換卡。

我現在不必擔心實際交換的隨機性,我只想知道如何交換兩張卡[它們本身就是結構]。

你的

DeckT *startCard

應該

CardT *startCard = &deck->cards[0];

randCard但可以/應該在內部循環中移動此變量

您對要使用哪些指針感到困惑。 Deck*指向甲板結構。 如果向其添加1,它將指向第一個Deck之后的Deck (就像您有一組甲板一樣)。 我很確定你不是那個意思。

您要在CardT上進行操作。 無需使用指針。 如果您有兩個索引要交換,假設ij ,直接在cards數組上進行操作:

CardT temp = deck->cards[i];
deck->cards[i] = deck->cards[j];
deck->cards[j] = temp;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM