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