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

Why isn't my loop terminating?

本文关键字:终止 我的 循环 为什么      更新时间:2023-10-16

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

您的循环没有终止,因为您在addtoi内对intern所做的任何更改都将保留在addtoi内。在那里获取指针的事实没有任何影响,因为为时已晚:您正在获取一个局部变量的指针,该变量是传入的i的副本

您可以通过引用传入intern来修复此问题,如下所示:

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

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

循环中的任何位置都不会更改i的值。您确实将其传递给addtoi,但传递的值

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

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

addtoi(1);

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

考虑:

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

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

循环不会终止,因为执行addtoi(i)时,i的值将发送到addtoi()函数,而不是原始的i变量。这是传递值的一个经典例子。

相关文章: