有人可以解释这个指针在这里指的是啥吗?

Posted

技术标签:

【中文标题】有人可以解释这个指针在这里指的是啥吗?【英文标题】:Can someone explain what this pointer refers to here?有人可以解释这个指针在这里指的是什么吗? 【发布时间】:2021-02-05 07:41:20 【问题描述】:

我遇到了一个素数生成器,他们在其中使用了这行代码

bool *numberlist = new bool[size+1];

这会产生什么?

代码在for循环中也有这个:

numberlist[i*j]=true;

numberlist 不是指针吗?你怎么能像数组一样遍历它。

【问题讨论】:

在 C 中,数组和指针在很多情况下是可以互换的。在第一段代码中,指针指向数组的第一个元素。在第二个中,它访问相对于指针的i*jth bool 值。 那么,numberlist[ ij ] == *numberlist[ ij ] ? 如果我理解您的疑问,这可能是 ***.com/questions/56220681/… 的欺骗。 @Sharkum no numberlist [i*j] == *(numberlist + (i*j)); []operator 已经做了一个指针解引用 了解C++ containers 和C++ rule of five 【参考方案1】:

分解一下,第一行代码bool *numberlist = new bool[size+1]; 声明一个大小为 [size+1] 的动态布尔数组。 for循环中的代码numberlist[i*j]=true;表示元素i*j为真。在 C++ 中,当我们使用大括号运算符 ( []) 我们正在做两件事。一个算术指针(因为数组是按顺序存储在内存中的)和两个解引用指针(访问指针指向的值)。

【讨论】:

【参考方案2】:

变量numberlist 包含一个指向大小为size + 1 的布尔数组的指针。

您可以通过运算符[] 访问元素。当您遍历内存中的 boolean 元素时,指针算法也适用于此。在 for 循环中,您可以使用:

for (size_t i = 0; i < size; i++) 
  std::cout << "numberlist[ " << i << "] = " << numberlist[i] << std::endl;

例如,如果您正在遍历 2D 矩阵,通常存储按行排序的项目并使用两个 for 循环来遍历行/列。您的numberlist 可能就是这种情况。

【讨论】:

以上是关于有人可以解释这个指针在这里指的是啥吗?的主要内容,如果未能解决你的问题,请参考以下文章

有人可以解释一下这里发生了啥吗?存在普遍量化

有人知道这里提到的机器描述是啥吗?

我的代码看起来很完美,但显示错误的输出。有人可以帮我我在这里做错了啥吗?

有人可以解释一下这个例子中 CSS 中的“溢出”到底对背景做了啥吗? [复制]

有人可以澄清 Mac OSX 安装中 cppcheck 中的 Homebrew 是啥吗

FxCop VS2013 有人知道警告标识符是啥吗?