最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言中函數(shù)參數(shù)的入棧順序詳解及實(shí)例

 更新時(shí)間:2017年02月11日 08:35:53   投稿:lqh  
這篇文章主要介紹了C語言中函數(shù)參數(shù)的入棧順序詳解及實(shí)例的相關(guān)資料,需要的朋友可以參考下

C語言中函數(shù)參數(shù)的入棧順序詳解及實(shí)例

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

#include

void foo(int x, int y, int z)
{
    printf("x = %d at [%X]n", x, &x);
    printf("y = %d at [%X]n", y, &y);
    printf("z = %d at [%X]n", z, &z);
}

int main(int argc, char *argv[])
{
    foo(100, 200, 300);
    return 0;
}

 運(yùn)行結(jié)果:

x = 100 at [BFE28760]
y = 200 at [BFE28764]
z = 300 at [BFE28768]

C程序棧底為高地址,棧頂為低地址,因此上面的實(shí)例可以說明函數(shù)參數(shù)入棧順序的確是從右至左的。可到底為什么呢?查了一直些文獻(xiàn)得知,參數(shù)入棧順序是和具體編譯器實(shí)現(xiàn)相關(guān)的。比如,Pascal語言中參數(shù)就是從左到右入棧的,有些語言中還可以通過修飾符進(jìn)行指定,如VisualC++。即然兩種方式都可以,為什么C語言要選擇從右至左呢?

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

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

感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!

相關(guān)文章

  • C++機(jī)房預(yù)約系統(tǒng)實(shí)現(xiàn)流程實(shí)例

    C++機(jī)房預(yù)約系統(tǒng)實(shí)現(xiàn)流程實(shí)例

    這篇文章主要介紹了C++機(jī)房預(yù)約系統(tǒng)實(shí)現(xiàn)流程,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2022-10-10
  • 手把手教你如何優(yōu)化C語言程序

    手把手教你如何優(yōu)化C語言程序

    程序進(jìn)行優(yōu)化,通常是指優(yōu)化程序代碼或程序執(zhí)行速度。優(yōu)化代碼和優(yōu)化速度實(shí)際上是一個(gè)予盾的統(tǒng)一,一般是優(yōu)化了代碼的尺寸,就會(huì)帶來執(zhí)行時(shí)間的增加,如果優(yōu)化了程序的執(zhí)行速度,通常會(huì)帶來代碼增加的副作用,很難魚與熊掌兼得,只能在設(shè)計(jì)時(shí)掌握一個(gè)平衡點(diǎn)
    2013-07-07
  • Windows系統(tǒng)下使用C語言編寫單線程的文件備份程序

    Windows系統(tǒng)下使用C語言編寫單線程的文件備份程序

    這篇文章主要介紹了Windows系統(tǒng)下使用C語言編寫單線程的文件備份程序,文中給出了實(shí)現(xiàn)的幾個(gè)關(guān)鍵代碼片段,剩下的只要套上main和線程調(diào)用的相關(guān)函數(shù)即可,非常詳細(xì),需要的朋友可以參考下
    2016-02-02
  • 詳解C語言的exp()函數(shù)和ldexp()函數(shù)以及frexp()函數(shù)

    詳解C語言的exp()函數(shù)和ldexp()函數(shù)以及frexp()函數(shù)

    這篇文章主要介紹了詳解C語言的exp()函數(shù)和ldexp()函數(shù)以及frexp()函數(shù),注意這三個(gè)函數(shù)雖然看起來相似但實(shí)際功能卻大相徑庭!需要的朋友可以參考下
    2015-08-08
  • VC打印word,excel文本文件的方法

    VC打印word,excel文本文件的方法

    這篇文章主要介紹了VC打印word,excel文本文件的方法,是VC操作文本文件中非常實(shí)用的技巧,需要的朋友可以參考下
    2014-10-10
  • C語言基礎(chǔ)之malloc和free函數(shù)詳解

    C語言基礎(chǔ)之malloc和free函數(shù)詳解

    這篇文章主要介紹了C語言基礎(chǔ)之malloc和free函數(shù)詳解的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • 利用C++實(shí)現(xiàn)?然連接操作算法

    利用C++實(shí)現(xiàn)?然連接操作算法

    這篇文章主要介紹了利用C++實(shí)現(xiàn)?然連接操作算法,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定參考價(jià)值,需要的小伙伴可以參考一下
    2022-08-08
  • C語言實(shí)現(xiàn)實(shí)驗(yàn)設(shè)備管理系統(tǒng)

    C語言實(shí)現(xiàn)實(shí)驗(yàn)設(shè)備管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)實(shí)驗(yàn)設(shè)備管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • Qt 儀表盤的實(shí)現(xiàn)示例

    Qt 儀表盤的實(shí)現(xiàn)示例

    儀表盤在很多汽車和物聯(lián)網(wǎng)相關(guān)的系統(tǒng)中很常用,本文就來介紹一下Qt 儀表盤的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • C語言SetConsoleTextAttribute函數(shù)使用方法

    C語言SetConsoleTextAttribute函數(shù)使用方法

    這篇文章介紹了C語言SetConsoleTextAttribute函數(shù)的使用方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-12-12

最新評(píng)論

咸宁市| 平邑县| 北碚区| 西畴县| 扶沟县| 平安县| 丰城市| 共和县| 湾仔区| 巨野县| 枝江市| 正安县| 武定县| 诸暨市| 虞城县| 陆川县| 炉霍县| 嵩明县| 冕宁县| 曲松县| 越西县| 营山县| 蒙山县| 汤阴县| 靖江市| 翁牛特旗| 老河口市| 宝兴县| 修武县| 铜陵市| 资溪县| 永福县| 泰州市| 新和县| 镇雄县| 垦利县| 缙云县| 辽宁省| 平昌县| 牡丹江市| 河曲县|