天天看點

函數的傳參

1.傳值參數

#include "stdafx.h"

#include <iostream>

void Add(int a, int b, int sum)

{

sum = a + b;

}

int _tmain(int argc, _TCHAR* argv[])

{

int a = 1;

int b = 2;

int sum = 0;

Add(a, b, sum);

std::cout << "sum is: " << sum << std::endl;

return 0;

}

輸出結果:sum is: 0

運作時實際參數的值将在Add函數執行之前 複制 給形式參數,如果實際參數與形式參數的資料類型不一緻,必須進行資料類型轉換,函數運作結束時,形式參數所屬的資料類型的析構函數會釋放該形式參數,形式參數的值不會複制到對應的實際參數中,是以不會改變實際參數的值。

可以了解函數運作時形式參數隻是實際參數的一個拷貝。

2.引用參數

#include "stdafx.h"

#include <iostream>

void Add(int &a, int &b, int &sum)

{

sum = a + b;

}

int _tmain(int argc, _TCHAR* argv[])

{

int a = 1;

int b = 2;

int sum = 0;

Add(a, b, sum);

std::cout << "sum is: " << sum << std::endl;

return 0;

}

輸出結果:sum is: 3

傳值參數在函數執行之前要調用形式參數的構造函數,函數運作結束時要調用析構函數,是以會增加程式運作的開銷。而引用參數則不同,在函數調用時并不是複制實際參數的值,而是直接用實際參數來代替形式參數,是以上面這段程式的sum的值應該是3。另外函數傳回時也沒有調用析構函數,是以程式運作時開銷比傳至參數模式小。

3.常量引用參數

#include "stdafx.h"

#include <iostream>

void Add(const int &a, const int &b, int &sum)

{

sum = a + b;

}

int _tmain(int argc, _TCHAR* argv[])

{

int a = 1;

int b = 2;

int sum = 0;

Add(a, b, sum);

std::cout << "sum is: " << sum << std::endl;

return 0;

}

輸出結果:sum is: 3

常量引用模式指出函數不得修改引用參數,在Add函數中,不能對參數a和b進行修改;由于sum的值改變了,是以不能采用常量引用參數。