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

C语言中空while循环的作用是什么?解析给定代码中的空循环

C语言空while循环的作用及代码解析

一、空while循环的常见作用

  • 利用循环条件完成核心逻辑:把赋值、指针移动等操作写在循环判断中,循环体仅作为语法占位(就是你提供的代码这种场景)
  • 等待外部触发条件:比如等待硬件寄存器状态变化、其他线程的信号通知,不过这种用法现在更多被更安全的同步机制替代,但老代码中较为常见
  • 临时占位:开发时先写空循环占住逻辑位置,后续再补充具体实现

二、给定代码的空循环解析

先看完整代码:

#include <stdio.h>
#include <string.h>

int main()
{
    char str[666];
    char * p1, *p2;

    strcpy ( str, "Hello world!");

    p2 = (p1 = str) + 6;
    
    while ( *p1++ = *p2++ ) {}
        printf ( "%p %p", p1, p2);
}

代码执行步骤拆解:

  1. 初始化阶段:

    • strcpy(str, "Hello world!") 将字符串"Hello world!"复制到数组str中,字符串末尾自带结束符'\0'
    • p2 = (p1 = str) + 6:先让p1指向str的首地址,再让p2指向str的第6个索引位置(原字符串中该位置是字符'w')
  2. 核心while循环逻辑:
    循环条件*p1++ = *p2++是关键,要结合C语言两个规则理解:

    • 赋值表达式的结果是被赋的值
    • 后置++是先执行当前操作,再让指针自增

    所以这个循环的每一次迭代会依次完成三件事:

    • 把p2当前指向的字符赋值给p1当前指向的内存位置
    • p1和p2各自向后移动一个字节(指向数组的下一个元素)
    • 判断刚才赋值的字符是否非0:如果是普通字符(非'\0'),循环继续;当赋值的是字符串结束符'\0'时,条件为假,循环终止

    对应到本代码:

    • 从p2指向的'w'开始,依次将'w'、'o'、'r'、'l'、'd'、'!'、'\0'赋值给p1初始指向的str[0]到str[6]位置
    • 当'\0'被赋值后循环结束,此时p1指向str[7],p2指向原字符串结束符的下一个位置(即str[13])
  3. 最终输出:
    printf会打印出循环结束后p1和p2对应的内存地址。

内容的提问来源于stack exchange,提问作者Nare Avetisyan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 08:57:20