日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
淺談C語言中函數(shù)參數(shù)的入棧順序

,我想大家都知道。棧,是硬件。主要作用表現(xiàn)為一種數(shù)據(jù)結(jié)構(gòu),是只能在某一端插入和刪除的特殊線性表。下面介紹C語言中函數(shù)參數(shù)的入棧順序是怎樣的。

網(wǎng)站建設(shè)哪家好,找成都創(chuàng)新互聯(lián)公司!專注于網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、小程序設(shè)計、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了樂至免費建站歡迎大家使用!

對技術(shù)執(zhí)著的人,比如說我,往往對一些問題,不僅想做到"知其然",還想做到"知其所以然".C語言可謂博大精深,即使我已經(jīng)有多年的開發(fā)經(jīng)驗,可還是有許多問題不知其所以然。某天某地某人問我,C語言中函數(shù)參數(shù)的入棧順序如何?從右至左,我隨口回答。為什么是從右至左呢?我終究沒有給出合理的解釋。于是,只好做了個作業(yè),于是有了這篇小博文。

 
 
 
  1. #include
  2. void foo(int x, int y, int z)
  3. {
  4. printf("x = %d at [%X]n", x, &x);
  5. printf("y = %d at [%X]n", y, &y);
  6. printf("z = %d at [%X]n", z, &z);
  7. }
  8. int main(int argc, char *argv[])
  9. {
  10. foo(100, 200, 300);
  11. return 0;
  12. }

運行結(jié)果:

x = 100 at [BFE28760]

y = 200 at [BFE28764]

z = 300 at [BFE28768]

C程序棧底為高地址,棧頂為低地址,因此上面的實例可以說明函數(shù)參數(shù)入棧順序的確是從右至左的??傻降诪槭裁茨兀坎榱艘恢毙┪墨I(xiàn)得知,參數(shù)入棧順序是和具體編譯器實現(xiàn)相關(guān)的。比如,Pascal語言中參數(shù)就是從左到右入棧的,有些語言中還可以通過修飾符進(jìn)行指定,如Visual C++.即然兩種方式都可以,為什么C語言要選擇從右至左呢?

進(jìn)一步發(fā)現(xiàn),Pascal語言不支持可變長參數(shù),而C語言支持這種特色,正是這個原因使得C語言函數(shù)參數(shù)入棧順序為從右至左。具體原因為:C方式參數(shù)入棧順序(從右至左)的好處就是可以動態(tài)變化參數(shù)個數(shù)。通過棧堆分析可知,自左向右的入棧方式,最前面的參數(shù)被壓在棧底。除非知道參數(shù)個數(shù),否則是無法通過棧指針的相對位移求得最左邊的參數(shù)。這樣就變成了左邊參數(shù)的個數(shù)不確定,正好和動態(tài)參數(shù)個數(shù)的方向相反。

因此,C語言函數(shù)參數(shù)采用自右向左的入棧順序,主要原因是為了支持可變長參數(shù)形式。換句話說,如果不支持這個特色,C語言完全和Pascal一樣,采用自左向右的參數(shù)入棧方式。


網(wǎng)頁名稱:淺談C語言中函數(shù)參數(shù)的入棧順序
鏈接分享:http://www.dlmjj.cn/article/cdedidi.html