C ++指针 - 什么时候重新分配?

时间:2016-01-14 21:48:18

标签: c++ pointers reference

我有以下代码来演示我的问题:

#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循环的范围内,所以我不确定这里发生了什么。

1 个答案:

答案 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;
        ^^^^^^^^^^^
    }