傳值,傳引用
阿新 • • 發佈:2018-12-19
值傳遞:函式操作的是形參,將實參拷貝給形參,拷貝完成後對形參修改不會影響實參,實參的值不會改變。
void swapValue(int x, int y) { cout << "交換前:" << endl; cout << "x=" <<x<<";y="<<y<< endl; int temp; temp = x; x = y; y = temp; cout << "交換後:" << endl; cout << "x=" << x << ";y=" << y << endl; } int main() { int a = 10; int b = 15; swapValue(a, b); cout << "a=" << a << endl; cout << "b=" << b << endl; }
可以看到呼叫swapValue函式只對形參x和y的值進行了互換,而並不影響實參a和b的值。
引用傳遞:引用是給物件起了另外一個名字,用宣告符 &定義應用型別,引用必須初始化,也就是說一旦定義引用,就必須給他繫結個物件,他和物件共用一個地址,改變物件的值,引用也會改變。改變引用的值,物件也會改變。引用作為引數傳遞時不進行拷貝。 例:
int main() { int a = 10; int & b = a; cout << "a=" << a<<endl; cout << "b=" << b << endl; cout << "a的地址=" << &a << endl; cout << "b的地址=" << &b << endl; cout << "改變a:" << endl; a++; cout << "a=" << a << endl; cout << "b=" << b << endl; cout << "a的地址=" << &a << endl; cout << "b的地址=" << &b << endl; cout << "改變引用b:" << endl; b++; cout << "a=" << a << endl; cout << "b=" << b << endl; cout << "a的地址=" << &a << endl; cout << "b的地址=" << &b << endl; }
上面的例子可以看出物件值的改變引用也隨之變化,引用的變化物件值也隨之變化,但是他們的地址一直不變,而且是同一個地址。 例:
void swapRefer(int& x, int& y) { cout << "交換前:" << endl; cout << "x=" << x << ";y=" << y << endl; cout<<"x="<<&x<< ";y=" <<&y << endl; int temp; temp = x; x = y; y = temp; cout << "交換後:" << endl; cout << "x=" << x << ";y=" << y << endl; cout << "x=" << &x << ";y=" << &y << endl; }
int main()
{
int a = 10;
int& aRe = a;
int b = 15;
int& bRe = b;
swapRefer(aRe,bRe);
cout << "a=" << a << " a地址="<<&a<<endl;
cout << "b=" << b <<" b地址=" <<&b<<endl;
}
傳遞引用時可以看到實參沒有拷貝給形參,引用傳遞操作的地址是實參地址 ,對形參進行操作就是對實參進行操作。