如何使用函数更改数组

How to change an array with a function?

本文关键字:数组 函数 何使用      更新时间:2023-10-16

我对C++很陌生,遇到了一个问题。
我正在尝试编写一个二十一点游戏。我有一个大小为 52 的数组,类型为"char",带有不同的卡片,我想洗牌。我不确定如何,但这不是问题。我做了一个名为"ShuffleDeck"的函数,但它不起作用,说它不能返回数组。我也无法引用数组。我应该怎么做?这是我正在谈论的代码部分。

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

所有的帮助都表示赞赏。

您使用std::vector并随机播放其中的值。最好通过引用将其传递给函数并处理原始向量。

从您的代码片段中,您并不完全清楚您希望它做什么 - 您通过引用传递一个bool数组,但将其作为带有语法rgCards[]int返回,这在该上下文中绝对没有意义。

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

从您提供的代码片段来看,您似乎正在尝试将对数组的引用传递给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 样式数组。

你也可以这样做

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

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

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

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

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

您对 rgCards[i] 所做的任何更改都将在调用 ShuffleDeck 后可用

最干净的解决方案,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
}