如何使用函数更改数组
How to change an array with a function?
我对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::array
或 std::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
}
相关文章:
- C++中的高效循环缓冲区,它将被传递给C样式数组函数参数
- 打印 2D 动态数组 c++ 函数
- C++数组函数
- 在数组函数指针中调用void
- 数组函数似乎没有找到最大值
- 使用数组函数和循环求解伪元编码|C
- 在头文件中的函数原型中获取指针数组:函数声明为 void
- 数组函数错误输出
- 读取文件,然后创建数组函数C++
- 指针数组函数参数-奇怪的行为
- 二维数组 - 函数
- "return"没有从数组函数返回正确的值
- 数组函数问题
- 数组函数的大小返回 int 的大小而不是数组
- 从数组函数中删除元素
- 如何从C++中最好地调用具有C99风格数组函数签名的函数
- 追加/打印/插入数组c++函数问题
- 如何将数组函数转换为指针函数
- 多维数组函数输出垃圾
- C++:数组函数的递归最大值