形參是函數聲明和定義的時候跟的參數,實參是調用函數時傳進去的參數。形參只是對參數進行類型說明,函數沒有被調用時,形參不占用內存;只有在調用時,才會為形參分配內存,將實參傳遞進去,即用實參對形參進行初始化。
函數的參數傳遞有兩種方式:值傳遞和引用傳遞。
值傳遞,就是函數調用時,給形參分配內存空間,利用實參對形參進行賦值。之后的執行過程中,形參和實參就脫離關系,互不影響。也就是說,用實參初始化形參之后,形參在子函數內如何變化,與實參無關。子函數返回或結束后,調用函數中的實參的值,並未因為賦值給形參,形參在子函數中改變而改變。
引用傳遞,就是利用引用類型的特點,來滿足我們對於達到在被調函數中對形參的操作,等同於對實參的操作的效果的需要。引用是一種特殊類型的變量,實際上是另一個變量的別名,使用引用名和使用原來的變量名來訪問變量是等效的。引用在做為形參時,不需要對其進行初始化,這是因為並不為形參分配內存。其他情況時,在聲明引用變量時,要對其進行初始化,使它指向一個實際的對象。一旦引用被初始化之后,就不能指向其他對象。利用引用的特點,可以將形參設置為引用類型,這樣函數調用時,實參對其進行初始化后,被調函數中任何對形參的操作,都相當於對調用函數中的實參的操作。
值調用和參數調用的區別,只在於函數聲明和定義時,形參的寫法不同,主調函數調用被調函數時的調用語句是一樣的。
補充:讀到拷貝構造函數一節時,對參數傳遞的兩種方式有了新的理解:如果在子函數內部,形參的值不被修改,那么就可以采用值傳遞的方式;如果子函數內部,有對形參的修改操作,那么就必須采用引用傳遞方式來進行參數傳遞。
