Java——形參和實參的區別


  • 形參出現在函數定義中,在整個函數體內都可以使用,離開該函數則不能使用。
  • 實參出現在主調函數中,進入被調函數后,實參變量也不能使用。 
  • 形參和實參的功能是作數據傳送。發生函數調用時,主調函數把實參的值傳送給被調函數的形參從而實現主調函數向被調函數的數據傳送
1.形參變量只有在被調用時才分配內存單元,在調用結束時, 即刻釋放所分配的內存單元。因此,形參只有在函數內部有效。 函數調用結束返回主調函數后則不能再使用該形參變量。 
2.實參可以是常量、變量、表達式、函數等, 無論實參是何種類型的量,在進行函數調用時,它們都必須具有確定的值, 以便把這些值傳送給形參。 因此應預先用賦值,輸入等辦法使實參獲得確定值。 
3.實參和形參在數量上,類型上,順序上應嚴格一致, 否則會發生“類型不匹配”的錯誤。 
4.函數調用中發生的數據傳送是單向的。 即只能把實參的值傳送給形參,而不能把形參的值反向地傳送給實參。 因此在函數調用過程中,形參的值發生改變,而實參中的值不會變化。
5.當形參和實參不是指針類型時,在該函數運行時,形參和實參是不同的變量,他們在內存中位於不同的位置,形參將實參的內容復制一份,在該函數運行結束的時候形參被釋放,而實參內容不會改變
 如果函數的參數是指針類型變量,在調用該函數的過程中,傳給函數的是實參的地址,在函數體內部使用的也是實參的地址,即使用的就是實參本身。所以在函數體內部可以改變實參的值。


轉自:http://blog.163.com/zhengguo_li/blog/static/703014802013423501214/

  • 形參:全稱為"形式參數"是在定義函數名和函數體的時候使用的參數,目的是用來接收調用該函數時傳如的參數.
  • 實參:全稱為"實際參數"是在調用時傳遞個該函數的參數.
void Exchg1(int x, int y) 
{
  int tmp;
  tmp=x;
  x=y;
  y=tmp;
  printf("Exchg1:x=%d,y=%d\n",x,y);
}
void Exchg2(int &x, int &y) 
{
  int tmp;
  tmp=x;
  x=y;
  y=tmp;
  printf("Exchg2:x=%d,y=%d\n",x,y);
}

void Exchg3(int *x, int *y) 
{
  int tmp;
  tmp=*x;
  *x=*y;
  *y=tmp;
  printf("Exchg3:x=%d,y=%d\n",*x,*y);
}


void main()
{
  int a=4,b=6;
  Exchg1 (a,b) ;
  printf("a=%d,b=%d\n",a,b);
  Exchg2 (a,b);
  printf("a=%d,b=%d\n",a,b);
  Exchg3(&a,&b) ;
  printf("a=%d,b=%d\n",a,b);
} 
這里Exchg1函數被調用的時候,並沒有成功交換a跟b的數據。為何呢。

int a=4,b=6;   Exchg1 (a,b) ;   //這里本質上發生的是:Exchg1 (intx=a,int y=b) ;   x跟y是函數定義里面的形參,也就是說這里只是把實參a跟b的值賦予了x,y這2個形參變量。接下來,函數里發生的值互換只換掉了x跟y的值,而實參a跟b沒有影響。

Exchg2 (a,b);   //再看本質Exchg2 (int &x=a,int &y=b);   這里x跟y都是a,b的引用,操作x跟y交換就等於a跟b交換,自然,調用Exchg2 可以成功交換a跟b

Exchg3(&a,&b) ;   //Exchg3(int *x=&a,int *y=&b);   x跟y2個形參是a跟b的指針,也就是實參數據存放的地址。然后函數里交換了x跟y指向的數據,也就是實參a跟b,所以,交換也是成功的。
代碼運行的結果,exchg1沒有交換a,b值;exchg2交換了a,b值,到了exchg,a,b的值似乎沒有交換,仍舊是a為4,b為6,剛開始以為代碼有問題,后來設置了斷點之后,發現代碼運行到exchg3(&a,&b)時,a=6,b=4了,所以代碼運行結果和初始值一樣的話,說明已經交換了a,b的值,至此說明代碼是沒有任何問題的。


轉自:http://blog.sina.com.cn/s/blog_58c3f7960100ptri.html

 


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM