C++ 經典案例1例

碼農談IT發表於2023-11-02

來源:DBA札記

案例

#include <iostream>

void swapr(int & a, int & b);   // a,b are aliases for ints
void swapp(int * p, int * q);   // p,q
void swapv(int a, int b);       // a,b are new variables

int main()
{
    using namespace std;
    int wallet1 = 300;
    int wallet2 = 350;

    cout << "wallet1 = $ " << wallet1;
    cout << " wallet2 = $ " << wallet2 << endl;

    cout << "Using references to swap contents:\n";
    swapr(wallet1, wallet2); // pass vvariables
    cout << "wallet1 = $" << wallet1;
    cout << " wallet2 = $" << wallet2 << endl;

    cout << "Using pointers to swap contents again:\n";
    swapp(&wallet1, &wallet2); //pass address of variables
    cout << "wallet1 = $" << wallet1;
    cout << " wallet2 = $" << wallet2 << endl;

    cout << "Trying to use passing by value:\n";
    swapv(wallet1, wallet2);  // pass values of variables
    cout << "wallet1 = $" << wallet1;
    cout << " wallet2 = $" << wallet2 << endl;

    return 0;
}

void swapr(int &a, int &b) // use references
{
    int temp;

    temp = a;
    a = b;
    b = temp;
}

void swapp(int *p, int *q) // use pointers
{
    int temp;

    temp = *p;
    *p = * q;
    *q = temp;
}

void swapv(int a, int b)  // try using values
{
    int temp;

    temp = a;
    a = b;
    b = temp;
}

解釋

這段程式碼演示了透過引用、指標和傳值三種方式來交換兩個變數的值。

首先,在程式碼中定義了三個函式:swapr、swapp和swapv,它們分別用於透過引用、指標和傳值來交換變數的值。

在主函式中,建立了兩個整型變數wallet1和wallet2,並分別賦值為300和350。

接下來,透過cout語句輸出wallet1和wallet2的值。

然後,使用swapr函式透過引用來交換wallet1和wallet2的值,並使用cout語句輸出交換後的值。

接著,使用swapp函式透過指標來交換wallet1和wallet2的值,並再次使用cout語句輸出交換後的值。

最後,使用swapv函式透過傳值來交換wallet1和wallet2的值,並再次使用cout語句輸出交換後的值。

透過執行這段程式碼,你會看到透過引用和指標交換的結果是正確的,而透過傳值交換的結果並不會影響原始的變數值。這段程式碼演示了透過引用、指標和傳值三種方式來交換兩個變數的值。

首先,在程式碼中定義了三個函式:swapr、swapp和swapv,它們分別用於透過引用、指標和傳值來交換變數的值。

在主函式中,建立了兩個整型變數wallet1和wallet2,並分別賦值為300和350。

接下來,透過cout語句輸出wallet1和wallet2的值。

然後,使用swapr函式透過引用來交換wallet1和wallet2的值,並使用cout語句輸出交換後的值。

接著,使用swapp函式透過指標來交換wallet1和wallet2的值,並再次使用cout語句輸出交換後的值。

最後,使用swapv函式透過傳值來交換wallet1和wallet2的值,並再次使用cout語句輸出交換後的值。

透過執行這段程式碼,你會看到透過引用和指標交換的結果是正確的,而透過傳值交換的結果並不會影響原始的變數值。

引用和指標的區別

引用和指標是C++中兩種不同的機制,用於處理變數的別名和記憶體地址。

  1. 引用(Reference):
  • 引用是變數的別名,透過使用&符號來宣告引用。
  • 引用必須在宣告時初始化,並且一旦初始化後,它將一直引用同一個變數。
  • 引用在使用時不需要使用*符號進行解引用,直接使用引用名即可訪問原始變數。
  • 引用不能為null,必須引用一個有效的物件。
  • 引用可以被用作函式引數,可以透過引用來修改原始變數的值。
  • 引用不能改變引用的目標,即不能改變它引用的變數。
  1. 指標(Pointer):
  • 指標是一個變數,它儲存了一個變數的記憶體地址。
  • 指標透過使用*符號來宣告,並且必須在宣告時初始化為一個有效的記憶體地址或者為null。
  • 指標可以透過解引用運運算元*來訪問指標指向的變數的值。
  • 指標可以為null,表示它沒有指向任何有效的物件。
  • 指標可以被重新賦值來指向不同的物件。
  • 指標可以用作函式引數,可以透過指標來修改原始變數的值。
  • 指標可以透過算術運算進行指標的移動。

總結:

  • 引用是變數的別名,指標是儲存變數記憶體地址的變數。
  • 引用必須在宣告時初始化,指標可以在任何時候進行初始化。
  • 引用不能為null,指標可以為null。
  • 引用不能改變引用的目標,指標可以透過重新賦值來指向不同的物件。
  • 引用使用起來更加簡潔,而指標更加靈活。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70024924/viewspace-2992448/,如需轉載,請註明出處,否則將追究法律責任。

相關文章