在C語言中,定義函式的形參和實參之間具體是如何進行引數傳

2022-02-10 19:19:33 字數 4777 閱讀 6097

1樓:匿名使用者

函式中的形參和呼叫時的實參都是陣列名時,傳遞方式為( 地址傳遞 )

此時形參和實參共用同一段記憶體

都是變數時,傳遞方式為( 值傳遞 )

實參與形參互不影響

2樓:匿名使用者

主要有兩種:(1)值傳遞:在函式呼叫時,將實參的值複製一份傳遞到呼叫函式中,這樣,如果在呼叫函式中修改了引數的值,也不會影響到實參的值。

(2)引用傳遞:與(1)相反,即會影響實參的值。如何區分它們呢?

實際上,通常在定義函式時,如果引數為陣列、指標或引用型別時,函式採用引用傳遞,否則採用值傳遞。

3樓:匿名使用者

傳值呼叫和引用呼叫  傳值呼叫和引用呼叫指的是用於引數傳遞過程中的一種機制。傳值呼叫中,只使用了實參的值。傳值呼叫機制裡,形參是一個區域性變數,其初始值為相應實參的值。

在引用呼叫機制裡,將實參的地址傳遞給形參,從表面上看是以實參變數取代形參,因此任何發生在形參上的改變實際上都發生在實參變數上。

形參的作用是實現主調函式與被調函式之間的聯絡,通常將函式所處理的資料,影響函式功能的因素或者函式處理的結果作為形參。沒有形參的函式在形參表的位置應該寫void.main 函式也可以有形參和返回值,其形參也稱為命令列引數,由作業系統在啟動程式時初始化,其返回值傳遞給作業系統。

形參和實參的對照例項(c語言版)  main()    int s(int n)

在c語言中,函式實參與形參之間的資料傳遞方式是( )傳遞方式。

4樓:八零後電影院

函式實參與形參之間的資料傳遞方式是( 值傳遞)傳遞方式,在c語言中,資料傳遞方式有值傳遞和引用傳遞,值傳遞:傳值,實際是把實參的值賦值給行參,相當於copy。

傳值呼叫中,只使用了實參的值。傳值呼叫機制裡,形參是一個區域性變數,其初始值為相應實參的值。在引用呼叫機制裡,將實參的地址傳遞給形參,從表面上看是以實參變數取代形參,因此任何發生在形參上的改變實際上都發生在實參變數上。

引用傳遞是將變數的記憶體地址傳遞給方法,方法操作變數時會找到儲存在該地址的變數,對其進行操作。會對原變數造成影響。可以將一個變數通過引用傳遞給函式,這樣該函式就可以修改其引數的值。

5樓:春雨_潤物

值傳遞。

實參與形引數據傳遞有兩種方式:值傳遞與地址傳遞。

地址傳遞的形式為 int &a=b;

也就是我們所說的引用,但引用只有c++中有,所以c語言都是值傳遞的。

有些人有誤解:認為c語言的int *p=&a;不也是按地址傳遞嗎?其實不是這樣的。

深入理解值傳遞與地址傳遞就會發現:

值傳遞是:把實參的值傳給一個變數(形參)。所以int *p=&a也是把a的地址值傳給了指標變數p

地址傳遞是:直接把地址傳進來,沒有賦給任何變數,這樣在函式體內對形參的操作也就是對實參地操作。有這種功能的也就是引用(&)了。

6樓:影碟思

實參拷貝一份給形參 形參如果是指標 則把實參地址賦給形參

c語言規定,呼叫一個函式時,實參變數和形參變數之間的資料傳遞方式是什麼 5

7樓:四舍**入

函式只有兩種傳遞方式:

1、值傳遞,又稱單向傳遞,只能把實引數值傳給形參 ,形參最後的結果不影響實參(形參改變大小 ,實參大小不變)。

2、址傳遞,通過指標,把實參的地址給形參,形參的大小可以影響實參。

8樓:匿名使用者

看到很多都說是值傳遞,本人認為只能由使用者指定傳遞方式。

在c語言中,軌道引數傳遞方式有兩種(其實還有引用傳遞):值傳遞和地址傳遞,也就是說可以值傳遞,也可以地址傳遞。至於到底採取什麼傳遞方式應該得有使用者根據形參型別來指定了。

比如 函式 int f( int *p) 此處接收的只能是地址型別

在主函式中定義變數 a =3; 此時實參a的值為3,很明顯 如果這種採用值傳遞方式呼叫 f(a)肯定不合適,

正確的應該是地址傳遞方式呼叫 f(&a) ,也許有些會說,地址也是值。但c明確的規定,實參的值和實參的地址是有本質區別的

故本人認為 傳遞方式只能由使用者根據 形參來指定傳遞方式。

9樓:

函式只有兩種傳遞方式 一個是值傳遞 一個是址傳遞 址傳遞 是指傳的是地址 也就是說 是以陣列過指標作為引數傳遞 而值傳遞傳的是 數 可以是整形的 也可以是實行的

10樓:匿名使用者

資料傳遞是「值傳遞」,即單向傳遞,只由實參傳遞給形參,而不能由形參傳回來給實參。

11樓:匿名使用者

實參向形參的資料傳遞是「值傳遞」,單向傳遞,只由實參傳給形參,而不能由形參傳回給實參

在c語言中,函式實參與形參之間的資料傳遞方式是( )傳遞方式。

12樓:柳念露鐵晗

值傳遞。

實參與形引數據傳遞有兩種方式:值傳遞與地址傳遞。

地址傳遞的形式為

int&a=b;

也就是我們所說的引用,但引用只有c++中有,所以c語言都是值傳遞的。

有些人有誤解:認為c語言的int

*p=&a;不也是按地址傳遞嗎?其實不是這樣的。

深入理解值傳遞與地址傳遞就會發現:

值傳遞是:把實參的值傳給一個變數(形參)。所以int*p=&a也是把a的地址值傳給了指標變數p地址傳遞是:

直接把地址傳進來,沒有賦給任何變數,這樣在函式體內對形參的操作也就是對實參地操作。有這種功能的也就是引用(&)了。

13樓:

實參拷貝一份給形參

形參如果是指標

則把實參地址賦給形參

在c語言中,函式的形參和實參可以佔同一個儲存單元,也可以佔不同的儲存單元吧?

14樓:四舍**入

形參只是實參的一個副本,即拷貝,它們不能公用儲存單元。

引數之間的傳遞分為數值傳遞與地址傳遞,如果是數值傳遞時,各自佔用不同的記憶體單元,如果是地址傳遞時,共用同一段記憶體單元。

函式呼叫時,主調函式把實參的值傳送給被調函式的形參從而實現主調函式向被調函式的資料傳送。 形參變數只有在被呼叫時才分配記憶體單元,在呼叫結束時,即刻釋放所分配的回記憶體單元。

形參只是實參的一個副本,即拷貝,它們不能公用儲存單元,不佔相同的空間。

15樓:來自杏花村大氣的木星

形參只是實參的一個副本,即拷貝,它們不能公用儲存單元。

如果傳入的是指標,那麼形參就是實參的一個指標拷貝。此時,形參指標和實參指標指向同一塊記憶體區域,雖如此,但是,不能說它們本身佔同一個儲存單元。

關於c語言 在c中呼叫函式時,只能把實參的值傳遞給形參,形參的值不能傳給實參。這句話對嗎?為什麼?

16樓:娛樂小八卦啊

不對,在c語言中,傳值有地址傳值和引數傳值,引數傳值只能將實參傳值給形參,所以a選項正確。c語言中的外部變數是可以在函式之間傳遞資料的。

c語言中的自動變數是預設的變數,實際上是函式中的區域性變數,所以d選項正確。全域性變數一經定義都是需要分配記憶體單元,在程式執行過程中自始至終都會佔用固定的空間,在未知記憶體情況下,最好不要使用全域性變數。

函式呼叫時,值可以雙向傳遞,並沒有限制使用全域性變數還是區域性變數,需要根據程式的邏輯需要進行選擇。

擴充套件資料

c語言引數傳遞:

1、值傳遞

引數傳遞只把變數a的值傳遞給了變數p,此時變數a與變數p是值相同的兩個不同變數,在記憶體不同的兩個地址中,所以對變數p賦值只是修改了變數p的值,並不能修改變數a的值。總結一句話就是:值傳遞不傳遞變數本身,只傳遞變數的值。

2、引用傳遞

與值傳遞不同,func的引數是int &p,表示引用傳遞。如輸出所示,通過引用傳遞,變數a的地址與變數p是相同的,也就是說引用傳遞把a的地址傳給了變數p,所以對變數p進行賦值之後,變數a的值也改變了,因為變數a與變數p實際是同一個變數。

3、指標傳遞

指標傳遞,顧名思義,int *p表明p是一個指標變數,呼叫func(&a)是把變數a的記憶體地址傳遞過去賦值給指標變數p,此時指標變數p的值是變數a的記憶體地址,故可看到輸出p為efbfde2c(變數a的記憶體地址)。

*p是對指標p的值(即變數a的記憶體地址)進行取值,相當於*&a,所以對*p進行賦值也就改變了變數a的值。

17樓:紅色老趙

實參是全域性變數,而形參是區域性變數.並且它們存放的地址也不一樣.

18樓:

不對,除了樓上所說的指標和陣列傳遞,還有一種情況就是引數分為入口引數和出口引數,二者區別在於入口引數在呼叫前必須被賦值,而後者在呼叫後才知道它的值,故出口引數是將形參的值傳給實參。(當然,出口引數一般為指標或陣列之類的)

19樓:炎二公子

比如定義

int f(int b) 這裡的b就是形參在呼叫的時候

我們寫 f(a) 這裡的a是本地變數,呼叫f的時候叫做實參在f(a)後,函式f裡的形參b的值是a賦予的,所以實參的值傳遞給形參這句話是對的

形參的值不能傳給實參這句話在嚴格意義上來說也是對的,比如,你在函式f(int b)裡面寫 b= 1000; 對於實參a來說並沒有任何影響。

但是,如果你的函式定義是指標,那麼函式可以改變指標上儲存的內容,但是不能改變指標本身。如果從這點考慮的話,實參是可以通過形參給改變的

20樓:

不對,你仔細看下書就知道為什麼了

C語言中的巨集定義如何傳遞形參

給巨集傳遞執行時計算的變數是絕無可能辦到的。不過假如只是這一個迴圈的話,可以利用預處理 define repeat 0 f f 0 define repeat 1 f repeat 0 f f 1 define repeat 2 f repeat 1 f f 2 define repeat 3 f ...

求大俠指教!c語言中的實參 形參是指什麼的啊有例項麼

比如這個簡單的例子。void main int sum int x,int y 這裡的x和y就是形參。沒有值傳入時,只是個形式表達。c語言中的入口引數是什麼意思啊?過了,表示不懂?有什麼例項嗎?你能提供一下你這個 入口引數 所在的文章片斷嗎?這樣方便有針對性的說明。我的理解應該就是函式的的輸入引數吧...

關於實參和形參的值轉換問題,實參和形參什麼條件下不能進行型別轉換

對於陣列型別的引數,實際上傳的是陣列的首地址,因此它是一個地址傳遞而不是值傳遞,值傳遞和地址傳遞我舉個例子就比較好理解 有一個抽屜裡面放著一個蘋果,這個抽屜相當於是一個住址 也就是地址 蘋果相當於該地址中的一個值 如果你傳入一個值,相當於把這個蘋果克隆了一個給函式,這個時候函式無論怎麼處理,這個抽屜...