c 中形參與實參的區別最好能詳細點

時間 2021-08-30 10:38:45

1樓:匿名使用者

#include

int fun(int a,int b) //形參a、bvoid main()

在這個程式中,x、y兩個引數是實參,在呼叫處的引數是實參;a、b兩個引數是形參,在函式定義處的引數是形參。

形參a、b只有在fun()函式被呼叫時才有記憶體,函式呼叫結束記憶體馬上釋放!實參x、y的在它的整個作用域內有記憶體。

2樓:科技鳥

形參:全稱為"形式引數"是在定義函式名和函式體的時候使用的引數,目的是用來接收呼叫該函式時傳如的引數. 實參:全稱為"實際引數"是在呼叫時傳遞個該函式的引數.

形參和實參的型別必須要一致,或者要符合隱含轉換規則,當形參和實參不是指標型別時,在該函式執行時,形參和實參是不同的變數,他們在記憶體中位於不同的位置,形參將實參的內容複製一份,在該函式執行結束的時候形參被釋放,而實參內容不會改變.

而如果函式的引數是指標型別變數,在呼叫該函式的過程中,傳個函式的是實參的地址,在函式體內部使用的也是實參的地址,即使用的就是實參本身.所以在函式體內部可以改變實參的值.

c++中,實參和形參有什麼區別?

3樓:無法無天

實參和形參被分配的地址不同。可以這樣比喻,實參是一間別墅,而形參是另一間別墅。實參裡的東西被複制了一份搬到了形參裡面,而形參這件別墅裡面的東西被扔了或者新增了新的東西是不會對實參這件別墅造成影響的。

如果不用指標或者引用,實參只能向形參裡面傳遞東西(值),就好比上面的舉例,實參的東西能拷貝一份搬到形參裡面,而形參裡面的東西(值)被改變卻不會反向傳遞,就是形參裡面的東西不會覆蓋實參的東西(值)。

簡單地說就是實參和形參操作的地址不同,如果需要得到改變的值,一般都是用return返回值,如果要改變實參都會使用指標或者引用來實現,這樣操縱地址使得實參操縱起來更加的方便。

形參的作用域僅限於定義的函式內,一旦出了這個函式,定義的形參就會被釋放掉。

4樓:匿名使用者

形參就是函式定義時候給引數隨便起的一個名字,只是為了和其它變數區別的形式上的名字

實參就是呼叫函式時,實際傳給函式的引數,傳了什麼就是什麼

5樓:賴福平

例如:int func(int a,int b)

int main()

其中a,b就是形式引數,x,y就是實際引數。形式引數是在函式實現的時候用到,而實際引數是在呼叫函式時把值傳遞給形式引數然後執行函式。

6樓:匿名使用者

int fun(int n)

int main()

這個例子裡面n是形參,他不是主函式中具體存在的引數。

i是實參,他在主函式中被定義,也就是在記憶體中有這個實際的個體,而在fun函式中,以n的形式被傳入。

區分起來很簡單,形參在自定義的函式中被定義,如n。而實參是在呼叫函式的時候需要被傳入的引數,如i。

7樓:

加點兒分吧,這樣大家都會關注的!

你的提問也會被排到前面!

c++中形參與實參的本質區別是什麼(例如儲存機理等)

8樓:手機使用者

形參:全稱為bai"形式引數"是在定du義函式名和函式體

zhi的時候使用的引數dao,目的是用來接收呼叫該函式時內傳如容的引數. 實參:全稱為"實際引數"是在呼叫時傳遞個該函式的引數.

形參和實參的型別必須要一致,或者要符合隱含轉換規則#includevoid main()int s(int n)//這個n還是形參

c++ 形參與實參,引用

9樓:

記住:函式全是值傳遞。。引數都是 傳遞原變數的值的一個 拷貝。不過你要弄明白傳遞的是什麼值。

a,普通變數時值傳遞,嗯,沒問題。你不能改變原來變數的值。

b,如果是指標,是地址的一個拷貝,其實也是值傳遞(地址的值傳遞)。你不能改變原來變數(地址)的值,但能(其實不是一定能)改變這個地址指向的內容,即所謂的實參被改變了。。。

c,如果是引用,傳遞的也是一個地址,不過這個地址又解析過了的,所以能直接用,不用再加*去解析(地址值傳遞,用時已經解析了)。改變值同指標一樣,不過不能改變地址就更明顯了(引用其實是一個解析了的const 指標)

1,值傳遞,而且不能修改原來的值。分配了空間。

2,你是指 char* p=0; char* &p2=p;樣子麼?對的,能這樣子,這時你用p2就和用p一樣了,表達的意思就是作為引數傳遞,你能改變引數的值了,就是能改變實參指標的地址了。。。。而且函式有時需要傳引數改變地址,引數就可以 char* &p2這樣子(也可以char** 不過要解析地址後用)。

然後就可以在函式裡面修改地址,然後原來那個指標(即指標的值(地址))就被改變了。其實原理和我上面說的一樣。不過有多重*

10樓:刀光劍影

是做值傳遞的,在呼叫函式時是分配空間的,呼叫完後就釋放了

11樓:crazy花生

對於傳值呼叫,是把實參的值傳遞給形參,此時形參是要被分配空間的,而你對形參做的任操作是不會改變實參的值的.

對於傳址呼叫,是指傳遞實參的地址,不為形參分配新的空間(其實個人認為,形參是有一個空間,用來儲存實參的地址的), 這裡對形參做的任何改變都會影響實參,使實參做相應的改變.

c++中,為什麼形參和實參個數要相同?形參不能被反覆被呼叫嗎?

12樓:

你這樣理解是錯誤的,教材上是指呼叫函式時傳遞的引數數目應該相同!當你多次呼叫函式也是分開多次把實參傳遞給函式的,所以書上寫的也是對的!

但是形參也不一定和實參個數是相同的,例如在c++可以這樣定義函式int max(int x,int y=1)可以這樣呼叫函式

max(2);或者max(2,3);

認真看書,提出疑問是對的!多累積,c++程式設計可以成為一門藝術!當你理解了這句話的時候就能成為高手了!

13樓:蘇州聖愛**

以下為個人見解,長時間不接觸程式設計,可能不是很準確!

呼叫函式的時候,程式將實參的值賦值給形參,從而使得函式中的資料處理能夠進行,如果實參個數和形參不等,則會導致資料無法傳遞,形參的值不能確定,從而函式無法正常執行!

所謂的形參和實參個數相同是指每次呼叫的時候,實參的個數和形參是相同的!而不是從整個程式中來看!

對於函式來說,一般在程式執行的開始時不分配空間的,只是放在函式的堆疊中,等呼叫的時候再具體分配記憶體空間,執行結束記憶體立即釋放。因此,對於c=max(a,b)來說,執行時建立形參x.y的儲存單元,執行完成將值賦值給c後,函式記憶體空間消除,同理d=max(e,f)執行時,建立新的儲存單元x.

y並將e.f的值傳入,執行後將結果賦值給d,函式空間釋放!從每次呼叫來看,函式裡面的實參都是兩個,不違背形參同實參個數相等的約定!

14樓:匿名使用者

樓主沒有理解「形參和實參的型別應相同,個數相同」!

型別應相同這個不用說了吧

當一個變數被函式呼叫的時候才能稱作實參,而不是說一個變數在被某個函式呼叫過之後永遠都是那個函式的引數

打個比方:假如一個學生是班長,當第二年重新選舉時落選了,這時班長就是另一個人,而他也就不再是班長了

所說引數的個數是指在函式呼叫裡的引數個數,如上max()的實參是兩個,形參也是兩個

其實「形參和實參的型別應相同,個數相同」這句話只是在c語言裡成立,在c++裡不能這麼說,因為c++可以使用預設引數,即實參個數可以少於形參個數

15樓:匿名使用者

同學 你理解錯誤了 形式引數不論在數量還是型別上都應該與其對應的實際引數相匹配! 你上面舉得那個列子同樣也是遵循了這個原理的,你只是在理解的時候出了點小錯。 所謂數量一樣 是指函式在被呼叫的「一次」過程中(重點是被呼叫一次),其實參、形引數量一樣,而不是你上面所說的 一個函式被呼叫了兩次之後,再加在一起來匹配對比的!

16樓:獵人

你這樣理解就錯了,這裡說的是在一次呼叫過程中,比如還是你那個函式,這樣呼叫就不對了:m=max(a,b,e);

這是所謂的形參與實參個數不同。

你上面說的,那是一個函式被呼叫了兩次,但它每次都是遵守規則的。

不知道明白了沒有?

C語言中形參與實參怎麼傳遞,c語言中形參和實參的區別?

我簡單描述一下 c語言傳遞引數機構是這樣的 非指標類的資料傳遞引數時傳數值,指標類資料傳遞引數時傳地址 這裡陣列名也算指標 比如int max int a,int b 這時候如果呼叫這個函式max x1,x2 僅僅將x1和x2的數值傳遞給函式max,a與x1佔有不同的記憶體區域 int max in...

什麼是函式的「形參」和「實參」,函式中什麼是實參什麼是形參

形參出現在函式定義中,在整個函式體內都可以使用,離開該函式則不能使用。實參出現在主調函式中,進入被調函式後,實參變數也不能使用。形參和實參的功能是作資料傳送。發生函式呼叫時,主調函式把實參的值傳送給被調函式的形參從而實現主調函式向被調函式的資料傳送。形參變數只有在被呼叫時才分配記憶體單元,在呼叫結束...

c語言中形參和實參是什麼意思?有什麼區別

舜茵戰韶容 引數傳遞主要用於模組化程式設計中。如果不瞭解引數傳遞是無法編寫出正確的呼叫函式的。形參就是形式引數,用一個變數代表大家。實參就是實際引數,用一個 確切的數值代替形式引數,可以是表示式。實際引數與形式引數的引數個數 型別和順序都應一樣,如果不一樣的話,系統會強制轉換,這樣會造成資料的丟失。...