【发布时间】:2022-01-05 08:50:50
【问题描述】:
我一直在阅读“The Xinu Approach 2nd Ed.”一书中有关操作系统设计的内容,并在第 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 循环是如何工作的吗?
【问题讨论】:
标签: c for-loop operating-system