LabView從入門到放棄(之隧道和移位寄存器)

下面的兩個(gè)源代碼,希望實(shí)現(xiàn)的功能是傳入一個(gè)參數(shù)0,通過三次循環(huán),每次在循環(huán)體內(nèi)加3,輸出的結(jié)果賦值給一個(gè)數(shù)值顯示控件。通過代碼的結(jié)果,來看看隧道和移位寄存器到底有什么區(qū)別。

在循環(huán)結(jié)構(gòu)的左右兩邊的小實(shí)心正方體表示了這條通道為隧道,對隧道點(diǎn)擊右鍵后可將其替換為移位寄存器,如圖二。另外,切記移位寄存器必定成對出現(xiàn),否則程序會(huì)出現(xiàn)編譯錯(cuò)誤。

改程序編譯運(yùn)行后,得到的結(jié)果卻迥然不同。圖一的隧道程序循環(huán)執(zhí)行3次后輸出的結(jié)果仍未3,而圖二的移位寄存器程序循環(huán)執(zhí)行3次后如愿以償?shù)牡玫搅?這個(gè)值,其原理在于:

a) 隧道是一個(gè)局部變量值,每次進(jìn)入循環(huán)體都會(huì)被循環(huán)體外部賦予一個(gè)初始值,所以即使圖一的循環(huán)執(zhí)行了3次,但是每一次隧道的左入口的值都為0,在循環(huán)體內(nèi)加3后,隧道的右出口值為3,即使執(zhí)行N次也是這樣。

b) 移位寄存器的值稍微不同,每一次在循環(huán)體內(nèi)執(zhí)行,每次都會(huì)把右邊移位寄存器出口的值用作左邊入口的值,因此執(zhí)行3次以后得到了9。

正如上文提到,熟悉C/C++的同學(xué)應(yīng)該會(huì)想到了,這就是我們所熟悉的局部變量和靜態(tài)局部變量的區(qū)別嘛!是的,隧道相當(dāng)于每次進(jìn)來循環(huán)體之后把循環(huán)體外的值賦予循環(huán)體內(nèi)的局部變量,所以不管循環(huán)體內(nèi)執(zhí)行幾次,其結(jié)果也等同于只執(zhí)行了一次。然而移位寄存器相當(dāng)于加了static的靜態(tài)局部變量,我們知道靜態(tài)局部變量是不會(huì)壓棧的,因此它的值會(huì)隨著每次循環(huán)體的執(zhí)行而往上累加。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容