为什么我的循环没有终止?
Why isn't my loop terminating?
这里的新手问题,有人能回答为什么这个循环没有终止吗?我正在重新定义变量的地址,然后取消对它的引用并添加一个。根据我的逻辑,它应该在第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变量。这是传递值的一个经典例子。
相关文章:
- 如何改进我的代码,使其不会因超时而终止?(黑客排名挑战)
- 为什么我的 while 函数没有终止?
- 为什么我的显示功能会终止程序?
- PostQuitMessage(0) 不会终止我的"程序"
- 这是我的 .h 文件的一些错误,当我在其中包含我的类模板时,它显示 [错误] 未终止 #ifndef
- 当我输入非整数值时,我的二次方程代码终止,如何让它正确循环?
- 为什么我的 C++ 应用以退出值 -1 终止,但某些代码逻辑未执行?
- 我正在尝试计算 char 数组中的内容,直到 null 终止,但每次编译时,我都会得到一个比我的数组大的数字
- 为什么我的析构函数中的异常没有触发 std::终止?
- 尝试将未知数量的字符串推送到向量中,但我的 cin 循环没有终止
- 我的链接列表程序在代码块编译器(X0000000005)中以状态-1073741819终止
- 对我是否需要一个哨兵值来终止我的 do while 循环以允许多个条目感到困惑
- 为什么我的 c++ 程序在 Eclipse 中没有输出而终止,但在 Visual Studio 中工作
- 为什么我的程序在执行后立即终止
- 为什么我的简单C++项目在我可以看到之前就终止于日食?我如何让它停止
- 我的Qt C++程序以一种不同寻常的方式终止
- 当我采用测试用例数 = 1 时,我的程序终止.其他明智的是,它给出了正确的答案,但跳过了最后一个测试用例
- 当我的程序终止时,我应该总是在COM指针上调用Release吗
- 如何通过按特殊字符"!"在 c++ 上终止我的程序?
- 我如何终止我的程序使用ESC按钮