为什么我的循环没有终止?

时间:2014-10-13 00:07:58

标签: c++ pointers for-loop

这里有新手问题,任何人都可以回答为什么这个循环没有终止?我正在重新定义变量的地址,然后取消引用它并向其中添加一个变量。根据我的逻辑,它应该在〜第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;
}

3 个答案:

答案 0 :(得分:4)

您的循环未终止,因为您对intern内的addtoi所做的任何更改都会留在addtoi内。你拿指针的事实没有效果,因为它太晚了:你正在使用一个局部变量的指针,这是传入i的副本。

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

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

您不需要获取其地址 - 只需修改它就会更改循环内i的值。

答案 1 :(得分:3)

您不会在循环中的任何位置更改i的值。您确实将传递给addtoi,但传递不能更改其值所使用的变量的值。那它为什么会结束呢?

如果您将引用或指针传递给iaddtoi,那么它可以更改i的值。但是如果你只传递值本身,那么它只能改变传递给它的值,这对i的值没有影响。

如果你这样做,你认为会发生什么:

addtoi(1);

你认为常数1会以某种方式改变吗?同样的事情 - 如果你传递一个值,你不能改变调用者的任何东西,因为你得到的只是一个值。

考虑:

int j = 1;
int i = 1;
addtoi(i);
addtoi(j);
addtoi(1);

这三个调用都将相同的值传递给addtoi,1。如果你传递的只是值,那么你获得该值的方式没有区别。

答案 2 :(得分:1)

循环没有终止,因为当你执行addtoi(i)时,i的值被发送到addtoi()函数而不是原始的i变量。它是传递价值的典型例子。