C++ 引用變量

2018-03-24 15:45 更新

學(xué)習(xí)C++ - C++引用變量

C++引用是作為先前定義的變量的替代名稱的名稱。

例如,如果您使Bob成為Robert變量的引用,則可以互換使用Bob和Robert。

引用變量的主要用途是作為函數(shù)的形式參數(shù)。

如果使用引用作為參數(shù),則該函數(shù)與原始數(shù)據(jù)而不是副本一起使用。

引用提供了一個方便的替代方法,用于處理具有函數(shù)的大型結(jié)構(gòu)的指針。

創(chuàng)建引用變量

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; 

每一次遞增robert影響這兩個變量。

我們可以創(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ù),使函數(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é)果。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號