我有以下代码来演示我的问题:
#include <iostream>
#include <queue>
using namespace std;
int main(int argc, char* argv[]){
queue<int> numbers;
for (int i = 0; i < 10; i++) {
numbers.push(i);
}
int temp = 10;
int *last = &temp;
for(int j = 0; j < 10; j++) {
cout << *last << endl;
int i = numbers.front();
cout << *last << endl << endl;
numbers.pop();
last = &i;
}
return 0;
}
将打印出来:
10
10
0
1
1
2
2
3
3
4
4
5
5
6
6
7
7
8
8
9
我对last
更改时指针int i
被重新分配的原因感到困惑。我想要的是last
持有对最后一个元素的引用 - 但是遇到了麻烦。我猜测指针指向i
的值 - 并在i
更改时更改。但是i
在for循环的范围内,所以我不确定这里发生了什么。
答案 0 :(得分:2)
虽然程序有效,因为局部变量i的地址没有被改变但是程序在循环的每次迭代中都有未定义的行为,除了第一次迭代指针最后引用语句中的非活动对象
cout << *last << endl;
由于作业
last = &i;
正确的循环可以采用以下方式
for(int j = 0; j < 10; j++) {
cout << *last << endl;
int i = numbers.front();
cout << *last << endl << endl;
numbers.pop();
*last = i;
^^^^^^^^^^^
}