谢谢!
#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;
}
答案 0 :(得分:4)
您的循环未终止,因为您对intern
内的addtoi
所做的任何更改都会留在addtoi
内。你拿指针的事实没有效果,因为它太晚了:你正在使用一个局部变量的指针,这是传入i
的副本。
您可以通过引用传递intern
来解决此问题,如下所示:
int addtoi(int& intern) {
intern++;
cout << intern << "\n";
return 0;
}
您不需要获取其地址 - 只需修改它就会更改循环内i
的值。
答案 1 :(得分:3)
您不会在循环中的任何位置更改i
的值。您确实将值传递给addtoi
,但传递值不能更改其值所使用的变量的值。那它为什么会结束呢?
如果您将引用或指针传递给i
到addtoi
,那么它可以更改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变量。它是传递价值的典型例子。