我在书中读到了关于操作系统设计的文章,书中的第182/183页的第10章中出现了一个for循环语句。for循环从递减for循环的初始化语句开始。我以前从未见过这种情况,所以我创建了自己版本的这个循环来处理它,如下所示:
#include stdio.h
main(){
int i = 100;
for(i--; i>0; i--){
printf("%d \r", i);
}
}在使用gcc编译并运行这个小程序时,输出是: 1.这使我相当困惑,因为我希望for循环最终跳过i=99,因为减量操作符是在观察到初始化变量之后运行的。
Xinu中的for循环代码开始了我的提问,它与缓冲池的创建有关,本质上是循环通过内存块(池)将其划分为单独的缓冲区。初始化变量numbufs表示用户希望从池中分割出的缓冲区的数量。池的起始地址由buf提供。下面是供参考的循环:
for (numbufs-- ; numbufs>0 ; numbufs-- ) {
bpptr = (struct bpentry *)buf;
buf += bufsiz;
bpptr->bpnext = (struct bpentry *)buf;
}有人能解释一下这类for循环是如何工作的吗?
发布于 2021-11-27 21:36:41
在循环的版本中,打印'\r‘字符。这是一个回车字符。结果是printf覆盖了已经写好的字符。请看这个问题:What's the Use of '\r' escape sequence?
发布于 2021-11-27 21:42:48
所写的循环将从99次减少到1次,每次重印。因为循环中没有延迟,所以它的运行速度将超过您所能看到的速度,并且您将在终端上只运行1。在printf之后将一个sleep(1);添加到循环中,您最好看看发生了什么。
https://stackoverflow.com/questions/70138871
复制相似问题