【发布时间】:2023-03-13 22:40:02
【问题描述】:
如果将地址放在数组末尾之后是合法的,如果数组地址的最后一个元素是0xFFFFFFFF,我该怎么做?
这段代码是如何工作的:
for (vector<char>::iterator it = vector_.begin(), it != vector_.end(); ++it)
{
}
编辑:
在提出这个问题之前,我在这里读到这是合法的:May I take the address of the one-past-the-end element of an array?
【问题讨论】:
-
是什么让您认为
0xFFFFFFFF是最大的可能元素?那么 64 位架构呢? -
访问过去的指针是不合法的。创建它们是合法的,而不是取消引用它们。
-
@Chris 这就是我想知道的,如果我做出任何你可以澄清的无效假设。我们只说 32 位。
-
例如,如果您有一个
vector<char>,它不会通过将大小添加到基数来计算end(),因此end()将是地址0,因为溢出?如果是这样,它应该可以正常工作,因为您的迭代器也会溢出到0并正常停止。 -
@SethCarnegie:
end()返回一个迭代器,而不是一个指针,因此它不能返回一个空指针。没有直接等效的“空迭代器”。
标签: c++