有人可以向我解释为什么这段代码不输出任何东西吗
Can someone explain to me why this code doesn't output anything
我已经为这里出了什么问题而崩溃了。在输出中我几乎什么也得不到。
很奇怪,通过正常的 cout
.
没有任何输出
请帮帮我!谢谢。
int main() {
int x = 111111;
array<int, 10> numbers;
numbers.fill(8);
const auto numbers_copy = numbers;
int y = 222222;
for (int* i = &y; i <= &x; i++) {
cout << *i << ' ';
}
cout << endl;
}
这个循环:
for (int* i = &y; i <= &x; i++) {
比较指向不相关对象的指针有未指定的结果。在这种情况下 i
指向 2 个不同的 int
对象,x
和 y
,因此第一次比较可能为真也可能不为真,因为无法保证 2堆栈上的对象将在内存中一个接一个地连续放置,或以任何特定顺序放置。
这同样适用于循环的第二次迭代。在第二次迭代中,当您第二次执行 i++
时,这是未定义的行为,因为当它指向 int
.[=19 时,您不能将 i
递增那么远=]
我已经为这里出了什么问题而崩溃了。在输出中我几乎什么也得不到。
很奇怪,通过正常的 cout
.
请帮帮我!谢谢。
int main() {
int x = 111111;
array<int, 10> numbers;
numbers.fill(8);
const auto numbers_copy = numbers;
int y = 222222;
for (int* i = &y; i <= &x; i++) {
cout << *i << ' ';
}
cout << endl;
}
这个循环:
for (int* i = &y; i <= &x; i++) {
比较指向不相关对象的指针有未指定的结果。在这种情况下 i
指向 2 个不同的 int
对象,x
和 y
,因此第一次比较可能为真也可能不为真,因为无法保证 2堆栈上的对象将在内存中一个接一个地连续放置,或以任何特定顺序放置。
这同样适用于循环的第二次迭代。在第二次迭代中,当您第二次执行 i++
时,这是未定义的行为,因为当它指向 int
.[=19 时,您不能将 i
递增那么远=]