如何用函数更改数组?

时间:2012-04-05 21:30:36

标签: c++

我对C ++很陌生,而且我遇到了一个问题 我试图写一个二十一点游戏。我有一个大小为52' char'与不同的卡,我想要洗牌。我不知道怎么回事,但不是问题。我做了一个名为' ShuffleDeck'但它不起作用,说它无法返回阵列。我也无法引用该数组。我该怎么办呢?这是我正在讨论的代码部分。

void ShuffleDeck(bool &rgCards[]) {
    for (int i = 1; i < 52; ++i) {
        //something
    }
    return rgCards[];
}

所有帮助表示赞赏。

5 个答案:

答案 0 :(得分:3)

您使用std::vector并随机播放其中的值。优选地,通过参考函数传递它并对原始矢量起作用。

从您的代码段开始,您的预期并不完全清楚 - 您通过引用传递bool数组,但将其作为int返回,其语法为rgCards[]在这种背景下绝对没有意义。

编辑:根据弗雷德的评论 - 您可以使用random_shuffle

答案 1 :(得分:2)

在您提供的代码段中,您似乎正在尝试将对数组的引用传递给ShuffleDeck()。数组引用的C ++语法是data-type (&)[N],其中N是数组中元素的数量。将您的功能更改为

void ShuffleDeck( char (&rgCards)[52] ) { ... }

您可以将其设为模板函数,并让编译器推导出数组长度

template<size_t N>
void ShuffleDeck( char (&rgCards)[N] ) { ... }

最后,由于您使用的是C ++,因此您应该切换到使用容器类,例如std::arraystd::vector而不是C样式的数组。

答案 2 :(得分:2)

您也可以这样做

void shuffle(int* deck, int size)
{
  for(int i =0; i < size; i++)
  {
    deck[i] = i;
  }
}

这表明数组确实作为指针传递。

int deck[52];
shuffle(deck,52);

答案 3 :(得分:1)

为了使代码与您编写的内容最相似,我只需进行最少的更正:请注意,&不是必需的,索引应该从0开始。

void ShuffleDeck(bool rgCards[]) {
    for (int i = 0; i < 52; ++i) {
        //something
    }
}

在调用ShuffleDeck后,您将对rgCards [i]进行任何更改

答案 4 :(得分:0)

最干净的解决方案,IMO:

class Deck {
  char cards[52];
public:
  void Shuffle();
};

void Deck::Shuffle()
{
  // I can change cards here because both cards and Shuffle are members of Deck
}