我一直在閱讀“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 回圈是如何作業的嗎?
uj5u.com熱心網友回復:
在您的回圈版本中,您列印 '\r' 字符。這是一個回車符。結果是 printf 覆寫了已經寫入的字符。請看這個問題:'\r' 轉義序列的用途是什么?
uj5u.com熱心網友回復:
所寫的回圈將從 99 倒計時到 1,每次都疊印。由于您在回圈中沒有延遲,它的運行速度會比您看到的要快,而且您最終只會1在終端上。將 a 添加sleep(1);到 printf 之后的回圈中,您將更好地了解發生了什么。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/367985.html
下一篇:具有默認初始化的C結構定義?
