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

无花括号且末尾带分号的while循环是什么含义?

不带花括号且末尾带分号的while循环解析

基础语法说明

在C/C++这类基于C语法的语言中,while循环的语法规则是:

while(条件表达式) 循环体语句;

这里的「循环体语句」可以是单条执行语句,也可以是用{}包裹的代码块。如果while条件后直接跟分号;,就表示循环体是空语句——也就是条件满足时,循环什么都不做,只是反复检查条件,直到条件不成立才退出循环。

结合你的代码具体分析

看你提供的这段代码:

while(i < j){
    while(distance(arr[++i]) < distance(p));
    while(distance(arr[--j]) > distance(p));
    if(i < j){
        swap(arr, i, j);
    }
}

第一个内层while循环

while(distance(arr[++i]) < distance(p));

这个循环的逻辑是:

  1. 先执行++i,让i的值自增1;
  2. 计算distance(arr[i])和distance(p)的大小;
  3. 如果前者小于后者,就重复步骤1和2;
  4. 直到distance(arr[i]) >= distance(p)时,循环停止。

简单说,它的作用是把i指针向右移动,直到找到第一个arr[i]的distance不小于p的distance的位置。

第二个内层while循环

while(distance(arr[--j]) > distance(p));

逻辑类似:

  1. 先执行--j,让j的值自减1;
  2. 计算distance(arr[j])和distance(p)的大小;
  3. 如果前者大于后者,就重复步骤1和2;
  4. 直到distance(arr[j]) <= distance(p)时,循环停止。

作用是把j指针向左移动,直到找到第一个arr[j]的distance不大于p的distance的位置。

整体逻辑

当两个内层循环找到对应的i和j后,如果此时i仍然小于j,就交换arr[i]和arr[j],然后外层while(i<j)继续执行,直到i >= j时整个循环结束——这看起来像是某种快速排序的分区逻辑,把数组元素按和p的distance大小进行划分。

注意事项

这种空循环体的写法虽然合法,但可读性很差,很容易被误认为是代码笔误(比如漏写了花括号)。实际开发中,建议改成更清晰的写法,比如用花括号包裹空循环体并加注释:

while(distance(arr[++i]) < distance(p)) {
    // 空循环:移动i至第一个不满足distance(arr[i]) < distance(p)的位置
}

内容的提问来源于stack exchange,提问作者Daniel Yoon

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 17:45:09