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); }
代码执行步骤拆解:
初始化阶段:
strcpy(str, "Hello world!")将字符串"Hello world!"复制到数组str中,字符串末尾自带结束符'\0'p2 = (p1 = str) + 6:先让p1指向str的首地址,再让p2指向str的第6个索引位置(原字符串中该位置是字符'w')
核心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])
最终输出:
printf会打印出循环结束后p1和p2对应的内存地址。
内容的提问来源于stack exchange,提问作者Nare Avetisyan
相关产品推荐
相关产品推荐

