新手问题,有人可以回答为什么这个循环没有终止吗?我要刷新变量的地址,然后取消引用它并向其中添加一个。按照我的逻辑,它应该在第10步之前终止。

谢谢!

#include <iostream>


using namespace std;

int addtoi(int intern);

int main(){

    for(int i = 0; i < 10;addtoi(i)){



    }

}

int addtoi(int intern){

    int *pt;

    pt = &intern;

    ++*pt;
    cout << *pt << "\t" << intern << "\n";

    return 0;
}

最佳答案

循环不会终止,因为您对intern中的addtoi所做的任何更改都保留在addtoi中。您将指针放在那里的事实没有效果,因为为时已晚:您正在获取本地变量的指针,该变量是传入的i的副本。

您可以通过按引用传递intern来解决此问题,如下所示:

int addtoi(int& intern) {
    intern++;
    cout << intern << "\n";
    return 0;
}

您无需获取其地址-只需对其进行修改即可更改循环内i的值。

关于c++ - 为什么我的循环不终止?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26331303/

10-10 22:41