1樓:唐龍
這是因為在呼叫swap函式的時候形參a與b獲得了x與y的值的拷貝。從數值上看a與x相等,b與y相等,但實際上在記憶體裡佔用的是不同的地址,把swap(x,y);一下大概長這樣(編譯器不是這麼處理的,甚至有多種處理方式,這裡只是為了方便理解):
int a = x;
int b = y;
int t = a;
a = b;
b = t;
所以x與y並沒有交換。如果想通過函式改變函式外部的變數的值,比如這裡的交換,可以使用指標或者引用。
引用比較簡單,就是將函式的形參列表改成這樣:
void swap(int &a,int &b)其餘的不用變。
如果用指標,則是需要在呼叫處取得變數的地址,在函式里使用間接引用,比較麻煩,效率也比引用略低。
2樓:熱情的大神
#include
using namespace std;
int x,y;
cin>>x>>y;
swap(x,y);
cout<
沒任何問題啊,x,y是會被交換的。
但你的理解不對 x,y不存在賦值的問題。
int swap(int &a,int &b)這個函式引數是使用了引用。
也就是說a,b和x,y不是賦值關係,而是同一個東西只是換了一個名字而已。
相當於給x,y取了個小名,本質上是一樣的。
3樓:四月
3. int &a, int &b,是形參,說白了就是佔位用的,當你傳入引數(實參)的時候,一般來說會將實參複製給形參,但是你用的是引用,就不存在複製的問題,&相當於取地址,函式內部交換了引用,即相當於原來的x 和 y也相應改變了!
c++中,實參和形參有什麼區別?
4樓:無法無天
實參和形參被分配的地址不同。可以這樣比喻,實參是一間別墅,而形參是另一間別墅。實參裡的東西被複制了一份搬到了形參裡面,而形參這件別墅裡面的東西被扔了或者新增了新的東西是不會對實參這件別墅造成影響的。
如果不用指標或者引用,實參只能向形參裡面傳遞東西(值),就好比上面的舉例,實參的東西能拷貝一份搬到形參裡面,而形參裡面的東西(值)被改變卻不會反向傳遞,就是形參裡面的東西不會覆蓋實參的東西(值)。
簡單地說就是實參和形參操作的地址不同,如果需要得到改變的值,一般都是用return返回值,如果要改變實參都會使用指標或者引用來實現,這樣操縱地址使得實參操縱起來更加的方便。
形參的作用域僅限於定義的函式內,一旦出了這個函式,定義的形參就會被釋放掉。
5樓:匿名使用者
形參就是函式定義時候給引數隨便起的一個名字,只是為了和其它變數區別的形式上的名字。
實參就是呼叫函式時,實際傳給函式的引數,傳了什麼就是什麼。
6樓:賴福平
例如:int func(int a,int b)
int main()
其中a,b就是形式引數,x,y就是實際引數。形式引數是在函式實現的時候用到,而實際引數是在呼叫函式時把值傳遞給形式引數然後執行函式。
7樓:匿名使用者
int fun(int n)
int main()
這個例子裡面n是形參,他不是主函式中具體存在的引數。
i是實參,他在主函式中被定義,也就是在記憶體中有這個實際的個體,而在fun函式中,以n的形式被傳入。
區分起來很簡單,形參在自定義的函式中被定義,如n。而實參是在呼叫函式的時候需要被傳入的引數,如i。
8樓:
加點兒分吧,這樣大家都會關注的!
你的提問也會被排到前面!
c語言形參的值能不能傳遞給實參
9樓:跟著老王看新鮮
形參和實參擁有分別的儲存空間,即便是指標傳遞,改變的也只可能是這個指標變數所指向的內容,而不是指標變數本身的值,也即,如有指標變數p,那對實參的變化,有可能改變的也只是*p的值,而不是p本身的值。
實參和形參在英文中,argument和parameter經常可以互換使用,但是c99標準規定了:
對於actualargument或actualparameter使用術語argument(譯為實參);對於formalargument或formalparameter使用術語parameter(譯為形參)。
為遵循這一規定,我們可以說形參是變數,實參是函式呼叫提供的值,實參被賦給相應的形參。因此,在上述示例中,times是pound()的實參,n是pound()的形參。類似地,在函式呼叫pound(times+4)中,表示式times+4的值是該函式的實參。
10樓:夢心天永恆
要看情況,行參只是實參的一個拷貝,形參改變了只是拷貝改變了,實參仍為原來的值,但是你如果用傳址呼叫的話,把形參定義為指標變數,實參呼叫地址的話,單你把指標所指的變數改變,實參所對應的值也改變了。
11樓:匿名使用者
不能,形參是實參的一個副本,實參不是形參的一個副本。
但是,有些時候,我們把形參做成了一個指標型別,用來返回資料。因為,(指標型的)形參雖然是(指標型的)實參的一個副本,但是指標指向的記憶體是相同的。如果在函式內修改了指標指向的記憶體的資料的話,(指標型的)實參採用原來的地址,一樣可以獲得修改後的記憶體資料的。
12樓:匿名使用者
看你是什麼形參。
1、直接用變數傳參一般是不能傳遞的。因為變數在傳遞中是兩個等值的不同變數,兩者互不影響。
2、如果是指標形參p,實參q,而且在被調函式中是對*p做的修改,那這時候這種修改可以傳遞。因為這時候是對p q指向的記憶體的直接修改,這種修改可以儲存,從而傳遞出來。
3、對陣列形參做的修改也可以傳遞。陣列名是一個常指標。
13樓:匿名使用者
可以!不信你舉個例子,哥給你解釋。
c語言中形參和實參的區別是什麼?
14樓:匿名使用者
形式引數和實際引數。
函式的引數分為形參和實參兩種。在本小節中,進一步介紹形參、實參的特點和兩者的關係。形參出現在函式定義中,在整個函式體內都可以使用,離開該函式則不能使用。
實參出現在主調函式中,進入被調函式後,實參變數也不能使用。形參和實參的功能是作資料傳送。發生函式呼叫時,主調函式把實參的值傳送給被調函式的形參從而實現主調函式向被調函式的資料傳送。
函式的形參和實參具有以下特點:
1. 形參變數只有在被呼叫時才分配記憶體單元,在呼叫結束時,即刻釋放所分配的記憶體單元。因此,形參只有在函式內部有效。函式呼叫結束返回主調函式後則不能再使用該形參變數。
2. 實參可以是常量、變數、表示式、函式等,無論實參是何種型別的量,在進行函式呼叫時,它們都必須具有確定的值,以便把這些值傳送給形參。因此應預先用賦值,輸入等辦法使實參獲得確定值。
3. 實參和形參在數量上,型別上,順序上應嚴格一致,否則會發生型別不匹配」的錯誤。
4. 函式呼叫中發生的資料傳送是單向的。即只能把實參的值傳送給形參,而不能把形參的值反向地傳送給實參。 因此在函式呼叫過程中,形參的值發生改變,而實參中的值不會變化。
【例】可以說明這個問題。
main()
int s(int n)
本程式中定義了一個函式s,該函式的功能是求∑ni的值。在主函式中輸入n值,並作為實參,在呼叫時傳送給s 函式的形參量n( 注意,本例的形參變數和實參變數的識別符號都為n,但這是兩個不同的量,各自的作用域不同)。在主函式中用printf 語句輸出一次n值,這個n值是實參n的值。
在函式s中也用printf 語句輸出了一次n值,這個n值是形參最後取得的n值0。從運**況看,輸入n值為100。即實參n的值為100。
把此值傳給函式s時,形參n的初值也為100,在執行函式過程中,形參n的值變為5050。返回主函式之後,輸出實參n的值仍為100。可見實參的值不隨形參的變化而變化。
15樓:匿名使用者
高階語言在設計程式模組時,模組名定義後,緊跟其後所定義的引數(括弧內)被稱為形參(也稱虛參)。當該模組被呼叫時,在主調模組中,出現在被呼叫的模組名後的引數被稱為實參。實參代替虛參的過程被稱為虛、實結合,也稱換參。
多數高階語言的換參是由編譯系統來完成,比如c語言和fortran語言亦是如此。basic語言的換參則是由程式設計人員來完成的。如果只允許實參向虛參傳遞,則被稱為「單向傳遞」,c語言的變數類虛、實結合即是「單向傳遞」。
如果同時允許虛參向實參傳遞,這種傳遞被稱為「雙向傳遞」,fortran 語言定義的子程式即是如此。
16樓:匿名使用者
1、形參 form parameter實參 real parameter
出現在函式定義中的引數,就叫形參。
出現在函式呼叫中的引數,就叫實參。
2、例如:函式定義:
int max( int a , int b ) 這裡的a,b就是形參。
函式呼叫。int main()
17樓:匿名使用者
傳形參改變的是函式內的值,傳實參是同時改變函式外的值。
18樓:早早瓦
形參:就是抽象的。
實參:就是具體的。
19樓:匿名使用者
四樓說的全是複製的吧,一個字都不少啊。
20樓:匿名使用者
在c中由於函式的呼叫就伴隨著介面的問題。
一個函式就是用來實現一個功能的,如:#include
int add(int a,int b)//把兩個數相加int main()
它相當於一個處理資料的機器,而資料就是原材料,這就需要一個材料的輸入口,就是函式設計的介面,在這個過程中我們首先定義了一個函式add(int a,int b)(製造了一臺機器),在定義這個函式的時候由於我們只是賦予它這個使兩個數相加的功能,但是定不知道它將把那兩個數相加,所以就先給它設定是對a,b相加,(就像我們只是造了機器,知道它的作用而沒有原料)這時的a,b就是形參,即它只是一個形式上的資料,是定義在函式中的。
而實參就是在呼叫函式的時候要向形參傳遞值,如num1,num2,(它就是機器要開工時需要的原料,有了它機器才能進行加工),我們實際上是要吧num1,num2相加,只是在主函式里寫**太繁雜,就把**寫到函式里邊。這時形參a,b被賦予了num1,num2的值後就可以代替num1,num2在add函式體中完成本想對num1,num2進行的操作(至於為什麼要用實參形參還涉及到資料的作用域的問題)
c語言中什麼是形參,什麼是實參?
21樓:惠企百科
形參:全稱為「形式引數」是在定義函式名和函式體的時候使用的引數,目的是用來接收呼叫該函式時傳遞的引數。
形參的作用是實現主調函式與被調函式之間的聯絡,通常將函式所處理的資料,影響函式功能的因素或者函式處理的結果作為形參。
實參:全稱為"實際引數"是在呼叫時傳遞給函式的引數,即傳遞給被呼叫函式的值。
實參可以是常量、變數、表示式、函式等, 無論實參是何種型別的量,在進行函式呼叫時,它們都必須具有確定的值, 以便把這些值傳送給形參。 因此應預先用賦值,輸入等辦法使實參獲得確定值。
c語言中什麼是形參,什麼是實參C語言中什麼是形參,什麼是實參?
形參 全稱為 形式引數 是在定義函式名和函式體的時候使用的引數,目的是用來接收呼叫該函式時傳遞的引數。形參的作用是實現主調函式與被調函式之間的聯絡,通常將函式所處理的資料,影響函式功能的因素或者函式處理的結果作為形參。實參 全稱為 實際引數 是在呼叫時傳遞給函式的引數,即傳遞給被呼叫函式的值。實參可...
c語言中形參和實參是什麼意思?有什麼區別
引數傳遞主要用於模組化程式設計中。如果不瞭解引數傳遞是無法編寫出正確的呼叫函式的。形參就是形式引數,用一個變數代表大家。實參就是實際引數,用一個 確切的數值代替形式引數,可以是表示式。實際引數與形式引數的引數個數 型別和順序都應一樣,如果不一樣的話,系統會強制轉換,這樣會造成資料的丟失。實 參向形參...
在C語言中,形參名與實參名到底是一樣好,還是不一樣好
名字是否相同並不重要,重要的是型別必須相同。因為,形參是所在函式的區域性變數,所以形參在所在函式中會被多次使用,你需要統籌考慮。而實參是主調函式的區域性變數,是根據實際需要作為引數呼叫被調函式的,是否呼叫被調函式並不需要另外考慮實參名稱,這是與形參的主要不同點。都可以。形參和實參對應看型別,不看名字...