[英]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
上進行操作。 無需使用指針。 如果您有兩個索引要交換,假設i
和j
,直接在cards
數組上進行操作:
CardT temp = deck->cards[i];
deck->cards[i] = deck->cards[j];
deck->cards[j] = temp;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.