You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

逐次循环执行过程

我们按循环次数一步步看指针变化和条件判断:

  1. 第一次循环

    • 条件 t1 < t2(地址0 < 27)成立,进入循环
    • ++t1 → t1 指向 txt[1]('T')
    • t2 -= 3 → t2 指向 txt[24]('P')
    • 此时t1地址是1,t2地址是24,1 < 24依然成立——这就是你的核心误区!你误以为此时t1已经超过t2,但两者地址差还很大,循环会继续。
  2. 第二次循环

    • ++t1 → txt[2]('E')
    • t2 -=3 → txt[21]('K')
    • 条件2 < 21成立,继续循环。
  3. 第三次循环

    • ++t1 → txt[3]('R')
    • t2 -=3 → txt[18]('-')
    • 条件3 < 18成立,继续循环。
  4. 第四次循环

    • ++t1 → txt[4]('N')
    • t2 -=3 → txt[15]('-')
    • 条件4 <15成立,继续循环。
  5. 第五次循环

    • ++t1 → txt[5]('I')
    • t2 -=3 → txt[12]('E')
    • 条件5 <12成立,继续循环。
  6. 第六次循环

    • ++t1 → txt[6]('T')
    • t2 -=3 → txt[9]('L')
    • 条件6 <9成立,继续循环。
  7. 第七次循环

    • ++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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:40:54