0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

函數(shù)參數(shù)傳遞的原理

PoisonApple ? 來源:網(wǎng)絡整理 ? 2018-03-02 11:41 ? 次閱讀

參數(shù)傳遞,是在程序運行過程中,實際參數(shù)就會將參數(shù)值傳遞給相應的形式參數(shù),然后在函數(shù)中實現(xiàn)對數(shù)據(jù)處理和返回的過程,方法有按值傳遞參數(shù),按地址傳遞參數(shù)和按數(shù)組傳遞參數(shù)。

形參:指出現(xiàn)在Sub 和Function過程形參表中的變量名、數(shù)組名,該過程在被調(diào)用前,沒有為它們分配內(nèi)存,其作用是說明自變量的類型和形態(tài)以及在過程中的作用。形參可以是除定長字符串變量之外的合法變量名,也可以帶括號的數(shù)組名。

實參:實參就是在調(diào)用Sub 和Function過程時,從主調(diào)過程傳遞給被調(diào)用過程的參數(shù)值。實參可以是變量名、數(shù)組名、常數(shù)或表達式。在過程調(diào)用傳遞參數(shù)時,形參與實參是按位置結(jié)合的,形參表和實參表中對應的變量名可以不必相同,但它們的數(shù)據(jù)類型、參數(shù)個數(shù)及位置必須一一對應。

函數(shù)參數(shù)傳遞的原理

等號、函數(shù)名稱、括弧和參數(shù),是函數(shù)的四個組成部分。

函數(shù)“=SUM(1,2,3)”,1、2和3就是SUM函數(shù)的參數(shù),沒有參數(shù)1、2、3,函數(shù)SUM則無從求值。

函數(shù)“=VLOOKUP(2,A:C,3,)”,沒有參數(shù)2、A:C和3,函數(shù)VLOOKUP如何在A:C區(qū)域查找A列中是2那一行第3列的數(shù)值?

當然,也有不需要參數(shù)的函數(shù),如“=PI()”、“=NOW()”、“TODAY()”等。

函數(shù)參數(shù)傳遞的原理

C語言中參數(shù)的傳遞方式一般存在兩種方式:一種是通過棧的形式傳遞,另一種是通過寄存器的方式傳遞的。這次,我們只是詳細描述一下第一種參數(shù)傳遞方式,另外一種方式在這里不做詳細介紹。

首先,我們看一下,下面一個簡單的調(diào)用例程:

int Add (int a, int b, int c)

{

return a+b+c;

}

void main()

{

int x =0 , y = 1, z = 2;

int result = 0;

result = Add(x, y, z);

printf(“Result for x+y+z %d”, result);

}

借助以上例程,我們具體看一下,參數(shù)是如何傳遞的。首先,我們了解一個知識點,就是“()”操作符在C語言中有很多含義,比如說,結(jié)合符、函數(shù)調(diào)用符等。那么在result = Add(x,y,z)語句中當然為函數(shù)調(diào)用符,因此在編譯階段,遇到函數(shù)調(diào)用符后的執(zhí)行序為,從最后一個參數(shù)開始壓棧,壓棧順序為z-》y-》x, 直到將全部的參數(shù)壓到調(diào)用棧中,然后call到Add對應的函數(shù)地址開始執(zhí)行。那么壓棧執(zhí)行完成后,??臻g,從上到下依次的順序為x-》y-》z(因為棧的生長方向為向上,即地址低的地方,因此,x在地址最低的地方,即棧頂)。因此,在被調(diào)用函數(shù)中參數(shù)的讀取和操作也都是發(fā)生在棧中的。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4237

    瀏覽量

    61965
收藏 人收藏

    評論

    相關(guān)推薦

    二維數(shù)組作為函數(shù)參數(shù)傳遞在實際中的應用

    由于表達式中的數(shù)組名data可以被解釋為指針,即data的類型為指向int [2]的指針類型int (*)[2],因此必須將pData聲明為與之匹配的類型,data才能作為實參傳遞
    的頭像 發(fā)表于 12-20 07:19 ?6480次閱讀

    #硬聲創(chuàng)作季 計算機基礎(chǔ):函數(shù)參數(shù)傳遞

    計算機基礎(chǔ)
    Mr_haohao
    發(fā)布于 :2022年11月03日 08:40:43

    [3.3.1]--函數(shù)參數(shù)傳遞1

    PHPPHP開發(fā)
    jf_75936199
    發(fā)布于 :2023年03月13日 10:23:51

    [3.3.2]--函數(shù)參數(shù)傳遞2

    PHPPHP開發(fā)
    jf_75936199
    發(fā)布于 :2023年03月13日 10:24:32

    函數(shù)參數(shù)傳遞(1)#程序設(shè)計基礎(chǔ)

    程序設(shè)計
    學習硬聲知識
    發(fā)布于 :2023年05月30日 13:00:32

    函數(shù)參數(shù)傳遞(2)#程序設(shè)計基礎(chǔ)

    程序設(shè)計
    學習硬聲知識
    發(fā)布于 :2023年05月30日 13:01:16

    函數(shù)參數(shù)傳遞#Python

    程序函數(shù)python
    未來加油dz
    發(fā)布于 :2023年08月26日 23:41:38

     函數(shù)參數(shù)傳遞(1)#Python

    程序語言代碼python
    未來加油dz
    發(fā)布于 :2023年08月30日 19:12:53

     函數(shù)參數(shù)傳遞(2)#Python

    程序語言代碼python
    未來加油dz
    發(fā)布于 :2023年08月30日 19:13:56

    keil 變量xdata函數(shù)參數(shù)傳遞

    char a).當aa作為參數(shù)傳到函數(shù)bb,用a來接收的時候,區(qū)域進行了改變,區(qū)域不同,是否會出現(xiàn)問題?函數(shù)bb里面,用的也是unsigned char xdata b來接收a的值。從存儲空間里面來看,從
    發(fā)表于 03-03 10:34

    怎么將函數(shù)參數(shù)傳遞給內(nèi)聯(lián)ASM

    這是怎么做到的?常規(guī)的asm指令編譯文件,但我從來沒有實現(xiàn)對函數(shù)外部聲明的函數(shù)參數(shù)或變量的訪問。我已經(jīng)研究了一段時間,但我不是很清楚。什么是正確的合成函數(shù)?當做
    發(fā)表于 09-29 09:22

    為什么調(diào)用C的函數(shù)參數(shù)傳遞的往往是傳值?

    ; swap(x,y); printf("%d,%d\n",x,y);}用這個swap函數(shù),并不能將x,y的值對換,因為函數(shù)是值傳遞,請大家?guī)兔υ趺蠢斫膺@個程序,打不開思路了。
    發(fā)表于 11-08 04:35

    函數(shù)參數(shù)傳遞出現(xiàn)錯誤

    定義一個函數(shù) void test(IDINT8U TpmNum, IDINT8U ChVal, IDINT16U ChalNum);并在程序中進行調(diào)用。結(jié)果通過設(shè)置斷點看到最后一個參數(shù)的值總是傳遞
    發(fā)表于 04-16 21:51

    函數(shù)參數(shù)傳遞總是出錯怎么辦

    函數(shù)參數(shù)傳遞總是出錯,怎么辦????可能會是什么原因?
    發(fā)表于 07-19 08:00

    單片機的本質(zhì)函數(shù)參數(shù)傳遞詳細資料說明

    本文檔的主要內(nèi)容詳細介紹的是單片機的本質(zhì)函數(shù)參數(shù)傳遞詳細資料說明。
    發(fā)表于 07-16 17:39 ?1次下載
    單片機的本質(zhì)<b class='flag-5'>函數(shù)</b><b class='flag-5'>參數(shù)</b><b class='flag-5'>傳遞</b>詳細資料說明