值傳遞方式:
1、普通調用,形參與實參為同樣的類型
fun(int i)()
fun(Student stud)
()
main()
{
fun(1);
Student s1;
fun1(s1);
}
在函數中可以修改形參的值,但不能改變其對應的實參的值(形參的值變化無法傳送到實參) 原因:在函數調用時將建立一個新的對象,是實參對象的拷貝,實參與形參分別占有不同的存儲空間,無論形參是否修改都不會改變實參的值。 這種形式的虛實結合,會產生實參的拷貝。當傳遞的對象較大時,時間開銷和空間開銷都比較大。
2、使用指針作為函數參數
fun(int * i)
{}
fun(Student * stud)
{}
main()
{
int i = 1;
fun(&i);
Student s1;
fun1(&s1);
}
其實質也是值傳遞方式,只是傳遞的值是一個地址,實參將地址傳遞給形參,虛實結合后,實參與形參指向同樣的地址。 其操作的都是同一個對象。 虛實結合時,也會產生實參的拷貝,為形參分配內存,用來存放指針值(即地址)
2、引用傳遞方式
1、用引用作為函數參數
fun(int& i){}
fun(Student& stud){}
main()
{
int i = 1;
fun(i);
Student s1;
fun1(s1);
}
不會為形參分配存儲空間(常稱為建立實參的一個拷貝),而是把實參的地址傳遞給形參(引用名),引用名也指向實參變量