引數和變數

maohaijun86123發表於2009-02-22

 函式分有引數函式和無引數函式,函式引數當然只有引數的函式。函式引數就是我們寫函式名稱後圓括號內的常量值、變數、表示式或函式。當我們定義函式時,這是的引數有稱為形式引數,形式引數不能是常量值。當我們引用或呼叫該函式時,這時的引數有稱為實際引數(實參)。形式引數的型別說明可在函式體{}與緊跟在函式名之後的()之間,也可在()之內,目前流行的風格應是在括號內。這是一種風格問題,可以依照個人習慣。

在函式呼叫時,大多數的情況下,主函式和被呼叫的函式之間有資料傳遞關係,在傳遞資料時情況較複雜,但記住一點就是引數型別必須匹配,數量一般也相等(除在某些庫函式用省時後續引數),集中較複雜的情況說明如下:

    1,強制型別轉換。這些型別轉換必須是c語言中可進行的。如形參說明為int,而實參為float型,那麼在實際處理時按float型處理。
    2,資料型別轉換。包括字串,在呼叫函式時傳遞實參變數陣列的目前地址,或字串的首指標。
    3,在以函式或表示式做引數時,實參形式的表示式或函式必須有確定的與形參型別匹配的值,
    另外還應注意,c中規定,實參變數對形參變數的資料傳遞都是在區域性的情況下單向傳遞的,只能是實參傳遞給形參,而不能把形參傳遞給實參,但是如果實參變數和形參變數都是全域性變數時就不同了,這時形參的改變會影響實參的改變,這在某些場合中是一種非常有用的方法。比如我們編寫兩個矩陣相乘的函式,兩個實參形式的矩陣相乘函式呼叫一個函式時,相乘的結果(兩矩陣相乘)要返回到呼叫函式,這是用全域性變數就是一種折中的方法,但最好的方法還是採用函式引數直接返回的方法,下面是用全域性變數的方法實現的陣列之間的乘法,用來說明引數的傳遞。

       package com.wepull.lesson1;

import java.util.Scanner;

public class TestJieCheng {
 public static void main(String[] args) {
  Scanner sc = new Scanner(System.in);
  System.out.println("請輸入一個數");
  int a = sc.nextInt();
  int c = f(a);
  System.out.println(a + "的階乘為" + c);
 }

 public static int f(int n) {
  if (n == 0 | n == 1) {
   int m = 1;
   return m;

  } else {

   int p = n * f(n - 1);
   return p;
  }

 }
}

       函式引數像數學中的函式一樣,在數學中,y=f(x)是基本的函式表達形式,x可看作是引數,y可看作是返回值;z=f(x,y)事二元函式,有兩個引數,在C語言中對應於兩個引數的函式。這樣大家或許明白了什麼時函式及函式引數了吧。

相關文章