C++引用是作為先前定義的變量的替代名稱的名稱。
例如,如果您使Bob成為Robert變量的引用,則可以互換使用Bob和Robert。
引用變量的主要用途是作為函數(shù)的形式參數(shù)。
如果使用引用作為參數(shù),則該函數(shù)與原始數(shù)據(jù)而不是副本一起使用。
引用提供了一個方便的替代方法,用于處理具有函數(shù)的大型結(jié)構(gòu)的指針。
C和C++使用&符號來表示變量的地址。
C++使用&符號來聲明引用。
例如,要使羅伯特成為變量的替代名稱,您可以執(zhí)行以下操作:
int bob; int & robert = bob; // makes robert an alias for bob
在這種情況下,&不是地址運算符。
相反,它作為類型標識符的一部分。
int&
表示引用到內(nèi)部。
參考聲明允許您互換使用bob和robert。
兩者都是指相同的值和相同的內(nèi)存位置。
#include <iostream>
using namespace std;
int main(){
int bob = 101;
int & robert = bob; // robert is a reference
cout << "bob = " << bob;
cout << ", robert = " << robert << endl;
robert++;
cout << "bob = " << bob;
cout << ", robert = " << robert << endl;
cout << "bob address = " << &bob;
cout << ", robert address = " << &robert << endl;
return 0;
}
上面的代碼生成以下結(jié)果。
&
在下面的代碼中聲明一個引用類型變量。
int & robert = bob;
&運算符在下一個語句中是地址運算符:
cout <<", robert address = " << &robert << endl;
我們可以創(chuàng)建一個引用和一個指針來引用bob:
int bob = 101; int & robert = bob; // robert a reference int * pbob = &bob; // pbob a pointer
那么你可以用bob和bbo來表示robert和* pbob,并且可以和&bob互換使用表達式&robert和pbob。
我們必須在聲明時初始化引用。
一個引用就像一個const指針,你必須在創(chuàng)建它時初始化它。
int & robert = bob;
實質(zhì)上是一個這樣的變相符號:
int * const pr = &bob;
在這里,引用robert與表達式*pr起著相同的作用。
引用通常用作函數(shù)參數(shù),使函數(shù)中的變量名稱成為變量的別名。
這種傳遞參數(shù)的方法稱為傳遞引用。
以下代碼顯示了如何使用引用和指針進行交換。
#include <iostream>
using namespace std;
void swapr(int & a, int & b); // a, b are aliases for ints
void swapp(int * p, int * q); // p, q are addresses of ints
int main(){
int my_value1 = 300;
int my_value2 = 350;
cout << "my_value1 = $" << my_value1;
cout << " my_value2 = $" << my_value2 << endl;
cout << "Using references to swap contents:\n";
swapr(my_value1, my_value2); // pass variables
cout << "my_value1 = $" << my_value1;
cout << " my_value2 = $" << my_value2 << endl;
cout << "Using pointers to swap contents:\n";
swapp(&my_value1, &my_value2); // pass addresses of variables
cout << "my_value1 = $" << my_value1;
cout << " my_value2 = $" << my_value2 << endl;
return 0;
}
void swapr(int & a, int & b) // use references
{
int temp;
temp = a; // use a, b for values of variables
a = b;
b = temp;
}
void swapp(int * p, int * q) // use pointers
{
int temp;
temp = *p; // use *p, *q for values of variables
*p = *q;
*q = temp;
}
上面的代碼生成以下結(jié)果。
C++通過引用將類對象傳遞給函數(shù)。
例如,您將使用字符串,ostream,istream,ofstream和ifstream類作為參數(shù)的引用參數(shù)。
以下代碼使用字符串類。
#include <iostream>
#include <string>
using namespace std;
string my_func(const string & s1, const string & s2);
int main(){
string input;
string copy;
string result;
cout << "Enter a string: ";
getline(cin, input);
copy = input;
cout << "Your string as entered: " << input << endl;
result = my_func(input, "***");
cout << "Your string enhanced: " << result << endl;
cout << "Your original string: " << input << endl;
return 0;
}
string my_func(const string & s1, const string & s2){
string temp;
temp = s2 + s1 + s2;
return temp;
}
上面的代碼生成以下結(jié)果。
更多建議: