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
的指针。哇,非常感谢你,这个愚蠢的错误正好说明我对指针是多么的陌生!