C++ while循环执行结果疑问:为何输出TT而非TP?
解释C++ while循环输出"TT"而非"TP"的原因
嘿,我来帮你理清这个循环到底怎么跑的——你之前的错误在于第一次循环后误以为t1地址超过了t2,但其实还差得远呢!咱们一步步拆解:
首先看完整代码:
#include <iostream> using namespace std; char txt[] = "ETERNITTPLATENE-OG-TAKPAPPEN-BLE-KASTET"; void funk(char* t1, char* t2, int n) { while (t1 < t2) { ++t1; t2 -= n; } cout << *t1 << *t2; } int main() { funk(txt, txt + 27, 3); cout << '\n'; return 0; }
初始状态
t1初始指向txt[0](字符'E')t2初始指向txt[27](字符'N')n = 3
逐次循环执行过程
我们按循环次数一步步看指针变化和条件判断:
第一次循环
- 条件
t1 < t2(地址0 < 27)成立,进入循环 ++t1→t1指向txt[1]('T')t2 -= 3→t2指向txt[24]('P')- 此时
t1地址是1,t2地址是24,1 < 24依然成立——这就是你的核心误区!你误以为此时t1已经超过t2,但两者地址差还很大,循环会继续。
- 条件
第二次循环
++t1→txt[2]('E')t2 -=3→txt[21]('K')- 条件2 < 21成立,继续循环。
第三次循环
++t1→txt[3]('R')t2 -=3→txt[18]('-')- 条件3 < 18成立,继续循环。
第四次循环
++t1→txt[4]('N')t2 -=3→txt[15]('-')- 条件4 <15成立,继续循环。
第五次循环
++t1→txt[5]('I')t2 -=3→txt[12]('E')- 条件5 <12成立,继续循环。
第六次循环
++t1→txt[6]('T')t2 -=3→txt[9]('L')- 条件6 <9成立,继续循环。
第七次循环
++t1→txt[7]('T')t2 -=3→txt[6]('T')- 此时
t1地址是7,t2地址是6,7 < 6不成立,循环终止。
最终输出
循环结束后,*t1是txt[7]的'T',*t2是txt[6]的'T',所以输出结果是TT。
总结:你错误判断了第一次循环后的指针地址大小关系,实际上t1仅前进1步,而t2后退3步,两者地址差仍然很大,循环会持续执行直到t1地址超过t2为止。
内容的提问来源于stack exchange,提问作者Me myself and I
相关产品推荐
相关产品推荐

