gpt4 book ai didi

C++ 数组和东西

转载 作者:行者123 更新时间:2023-11-28 00:30:40 25 4
gpt4 key购买 nike

我必须加上前缀,这对于了解他们的东西的人来说可能是一个垒球问题,但遗憾的是,这并不能描述我。

我正在尝试编写一个函数,它接受一个长度未知的 bool 值列表,并根据一些规则修改每个条目

规则 1)如果 array[j] = false,则保持 array[j] 不变

规则 2) 如果 array[j] = true,则保留它为 true 并将任何后续的“true”变为“false”

我的策略是创建一个循环遍历数组的函数,一旦找到第一个为真(如果有的话),它会将其余条目设置为假并跳出循环。我将向函数传递数组的大小和第一个条目(我将通过取消引用从中获取数组开头的地址)。

我必须做出的唯一假设(我认为)是1) 数组内容在内存中是连续的2)内存不会在数组的创建和函数的调用之间被重新利用。

我的函数是这样的-

void takeFirstTrue(char size, bool list0)
{
bool* myPtr = NULL;

for (char j = 0; j <= (size - 1); j++)
{
myPtr = &list0 + j;

if ( *myPtr )
{
for (char k = 0; k <= (size - 1); k++) { *(&list0 + k) = false;}
*(&list0 + j) = true;
j = size;
}
}
}

奇怪的是,有时它会起作用,有时它会错误地将第一个条目设置为 true,而不考虑“真实”值。我来自较低级别的 H/W 背景,所以我习惯于考虑寄存器地址和程序计数器之类的东西。许多这些高级语言功能对我来说都是新的,所以我假设我违反了一些我不知道的规则。

PS - 我确信有很好的库可以处理这些东西。我听说过(虽然不太了解)boost 和智能指针之类的东西。请不要推荐那些,至少现在不要。我想学习如何自己拉动所有正确的杠杆。

最佳答案

bool list0 是一个 bool 值。它不是一个列表。当您编写 &list0 + j 时,您会导致未定义的行为。

改为这样做:

void takeFirstTrue(int size, bool list[])
{
for (int j = 0; j < size; ++j)
{
bool *myPtr = &list[j];
// ..
list[k] = false;

我使用 int 而不是 char 因为 int 溢出的可能性比 char 小。实际上,使用 size_t 会更好,只要您熟悉无符号类型在 C++ 中的工作方式即可。

关于C++ 数组和东西,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23025655/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com