arm標(biāo)準(zhǔn)庫(kù)函數(shù)怎么用 C語(yǔ)言,自定義函數(shù)要注意些什么?
C語(yǔ)言,自定義函數(shù)要注意些什么?C語(yǔ)言中自定義函數(shù)最常見(jiàn)的注意點(diǎn)之一是區(qū)分 "價(jià)值傳遞 "和 "地址傳遞 "。 "價(jià)值轉(zhuǎn)移 "和 "地址轉(zhuǎn)移和都是一個(gè)字不一樣,發(fā)音很接近,卻是天壤之別。很多初學(xué)C語(yǔ)言
C語(yǔ)言,自定義函數(shù)要注意些什么?
C語(yǔ)言中自定義函數(shù)最常見(jiàn)的注意點(diǎn)之一是區(qū)分 "價(jià)值傳遞 "和 "地址傳遞 "。 "價(jià)值轉(zhuǎn)移 "和 "地址轉(zhuǎn)移和都是一個(gè)字不一樣,發(fā)音很接近,卻是天壤之別。很多初學(xué)C語(yǔ)言的人,經(jīng)常對(duì)通過(guò)函數(shù)傳遞一個(gè)數(shù)據(jù)值和一個(gè)地址感到困惑,以至于C程序的運(yùn)行結(jié)果差別很大。這個(gè)回答會(huì)詳細(xì)解釋 "地址轉(zhuǎn)移和和 "價(jià)值轉(zhuǎn)移 "在C語(yǔ)言中。
用于值傳遞和地址傳遞的I. C程序代碼,以闡明 "價(jià)值轉(zhuǎn)移 "和 "地址轉(zhuǎn)移和,讓 讓我們先來(lái)看一段C程序代碼,如下:
上面的C程序代碼很簡(jiǎn)單:在C程序的主函數(shù)中定義了兩個(gè)整型變量para1和para2,初始值分別為1和2;還有一個(gè)指針變量pInt,它的初始值是變量para2的地址。
在c程序的主函數(shù)中,首先調(diào)用自定義函數(shù)ValueTrans,將變量para1作為參數(shù)。在自定義函數(shù)ValueTrans中,將變量para1重新賦值為11。調(diào)用函數(shù)ValueTrans后輸出變量para1的值,看看是什么;
在C程序的主函數(shù)中,再次調(diào)用用戶自定義函數(shù)AddrTrans,將指針pInt作為參數(shù)。在自定義函數(shù)AddrTrans中,將指針pInt指向的值重新賦值為22。調(diào)用函數(shù)AddrTrans后,輸出變量para2的值,看看是什么;
現(xiàn)在讓我們 讓我們來(lái)看看這個(gè)C程序的運(yùn)行結(jié)果:
驚訝不驚訝?驚訝嗎?
第二,值傳遞和地址傳遞的解釋現(xiàn)在讓 下面解釋一下為什么上面的C程序代碼是這樣的運(yùn)行結(jié)果。
1.價(jià)值轉(zhuǎn)移
上面的c程序代碼調(diào)用函數(shù)ValueTrans,并將變量para1作為參數(shù)。注意,變量para1的值1被作為參數(shù)。
當(dāng)執(zhí)行ValueTrans函數(shù)時(shí),系統(tǒng)會(huì)悄悄地在某個(gè)地方創(chuàng)建一個(gè)名為para1的新整數(shù)變量。這個(gè)整型變量para1并不是C程序代碼主函數(shù)中的para1。我們可以把主函數(shù)中的para1看成main_para1,把函數(shù)ValueTrans中的para1看成ValueTrans_para1。然后在函數(shù)ValueTrans中,11實(shí)際上被賦給了變量ValueTrans_para1。至于變量main_para1,還是!
所以在C程序的主函數(shù)中,最后一個(gè)變量para1的值還是1。
2.地址傳輸
上面的c程序代碼調(diào)用函數(shù)AddrTrans,將指針pInt作為參數(shù)。注意,此時(shí)變量para2的地址作為參數(shù),有意思!當(dāng)執(zhí)行函數(shù)AddrTrans時(shí),系統(tǒng)本身會(huì)在某個(gè)地方創(chuàng)建一個(gè)新的指針變量,也叫pInt。但是這個(gè)指針變量pInt的值就是main函數(shù)中那個(gè)pInt的值。換句話說(shuō),兩個(gè)指針變量pInt同時(shí)指向C程序中主函數(shù)的變量para2。然后在函數(shù)AddrTrans中給指針pInt所指的值賦22,實(shí)際上改變了主函數(shù)中變量para2的值,很神奇!這就是C語(yǔ)言指針的魅力!
所以在C程序的主函數(shù)中,最后一個(gè)變量para2的值變成了22。
以上是C語(yǔ)言編程中自定義函數(shù)時(shí)需要注意的地方。你清楚了嗎?
ARM指令中BL和BEQ是什么意思?還有LR指什么?不明白,剛開(kāi)始學(xué),請(qǐng)教下各路大神~~?
1.b,BL,跳。BL相當(dāng)于c中的調(diào)用子函數(shù),在跳轉(zhuǎn)標(biāo)簽的末尾加上MOVPC,LR就可以返回BL的下一條指令。BEQ(比較相等,EQ相等)在BEQ指令之前應(yīng)該有一個(gè)比較指令,比如CMP R0,R1如果R0R1,BEQ指令就執(zhí)行,否則不執(zhí)行。
鏈接寄存器(用來(lái)存儲(chǔ)子程序的返回地址)LR相當(dāng)于指針變量,指令在內(nèi)存中的地址。如果子例程再次調(diào)用子例程,那么之前調(diào)用的子例程的返回地址應(yīng)該存儲(chǔ)在堆棧中。