有人可以解释这个指针在这里指的是啥吗?
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*j
th 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 中的“溢出”到底对背景做了啥吗? [复制]