C++ 为什么不是';我的循环没有终止吗?

C++ 为什么不是';我的循环没有终止吗?,c++,pointers,for-loop,C++,Pointers,For Loop,新手问题,有人能回答为什么这个循环没有终止吗?我重新引用变量的地址,然后取消引用并向其中添加一个。按照我的逻辑,它应该在第十步结束 谢谢 #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;

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

谢谢

#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;
}
#包括
使用名称空间std;
int addtoi(int实习生);
int main(){
对于(int i=0;i<10;addtoi(i)){
}
}
内部助理(内部实习生){
int*pt;
pt=&实习生;
++*pt;

不能在循环中的任何位置都不更改
i
的值。可以将其值传递给
addtoi
,但传递值不能更改所取值的变量的值。那么,它为什么会结束呢

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

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

addtoi(1);
你认为常量
1
会有变化吗?同样的道理——如果你传递一个值,你就不能在调用者中改变任何东西,因为你得到的只是一个值

考虑:

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

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

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

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

int addtoi(int& intern) {
    intern++;
    cout << intern << "\n";
    return 0;
}
intaddtoi(内部和内部){
实习生++;

cout循环没有终止,因为当您执行
addtoi(i)
时,i的值被发送到
addtoi()
函数,而不是原始的i变量。这是一个传递值的经典示例。

首先,在
addtoi
方法中,您并没有真正更改
i
的值。其次,您需要将
i
作为引用传递,或者将其转换为指针,这样方法内部的更改将反映在它的外部你,我刚刚意识到一个愚蠢的错误:)当你把
I
传递给你的函数时,它会复制一个它在函数中使用的副本。你需要通过引用传递或传递指向
I
的指针。哇,非常感谢你,这个愚蠢的错误正好说明我对指针是多么的陌生!