C++ 引用和指標:記憶體地址、建立方法及應用解析

小万哥丶發表於2024-04-11

C++ 引用和指標

建立引用

引用變數是對現有變數的“別名”,它是使用 & 運算子建立的:

string food = "Pizza"; // 食物變數
string &meal = food;   // 對 food 的引用

現在,我們可以使用變數名 food 或引用名 meal 來引用食物變數:

cout << food << "\n"; // 輸出 Pizza
cout << meal << "\n"; // 輸出 Pizza

C++ 記憶體地址

記憶體地址

在前一頁的示例中,使用 & 運算子建立了一個引用變數。但它也可以用於獲取變數的記憶體地址;即變數在計算機上儲存的位置。

當在 C++ 中建立一個變數時,會為該變數分配一個記憶體地址。當我們給變數賦值時,它將儲存在這個記憶體地址中。

要訪問它,使用 & 運算子,結果將表示變數儲存的位置:

string food = "Pizza";

cout << &food; // 輸出 0x6dfed4

注意:記憶體地址以十六進位制形式表示(0x..)。注意你可能在你的程式中得不到相同的結果。

為什麼知道記憶體地址很有用呢?

引用和指標在 C++ 中非常重要,因為它們使你能夠操作計算機記憶體中的資料 - 這可以減少程式碼並提高效能。

這兩個特性是使 C++ 與其他程式語言(如 Python 和 Java)不同的因素之一。

C++ 指標

建立指標

可以使用 & 運算子獲取變數的記憶體地址:

string food = "Pizza"; // 型別為 string 的食物變數

cout << food;  // 輸出 food 的值(Pizza)
cout << &food; // 輸出 food 的記憶體地址(0x6dfed4)

然而,指標是一種將記憶體地址作為其值的變數。

指標變數指向相同型別的資料型別(如 intstring),並使用 * 運算子建立。將正在處理的變數的地址分配給指標:

string food = "Pizza"; // 型別為 string 的食物變數
string* ptr = &food;   // 指標變數,名為 ptr,儲存 food 的地址

// 輸出 food 的值(Pizza)
cout << food << "\n";

// 輸出 food 的記憶體地址(0x6dfed4)
cout << &food << "\n";

// 使用指標輸出 food 的記憶體地址(0x6dfed4)
cout << ptr << "\n";

示例解釋

  • 使用星號 *string* ptr)建立一個名為 ptr 的指標變數,它指向一個字串變數。注意指標的型別必須與你正在處理的變數的型別匹配。
  • 使用 & 運算子儲存名為 food 的變數的記憶體地址,並將其分配給指標。
  • 現在,ptr 持有 food 的記憶體地址的值。

提示:宣告指標變數有三種方式,但第一種方式是首選的:

string* mystring; // 首選
string *mystring;
string * mystring;

引用和指標的區別

特性 引用 指標
初始化 必須初始化 可以不初始化
可空 不允許空引用 允許空指標
可變性 一旦初始化就不能改變引用指向的變數 可以改變指標指向的變數
解引用 不需要解引用 需要解引用
效率 通常比指標更有效率 通常比引用效率低

什麼時候使用引用和指標

  • 使用引用:
    • 函式引數傳遞:引用可以傳遞給函式,函式可以直接修改引用指向的變數,而無需建立副本。
    • 提高效率:引用比指標更有效率,因為不需要指標的解引用操作。
  • 使用指標:
    • 動態記憶體分配:指標用於動態分配和釋放記憶體。
    • 複雜資料結構:指標用於訪問和操作複雜資料結構,例如連結串列和樹。

總而言之,引用和指標都是 C++ 中強大的工具,可以用於高效地操作記憶體和資料。選擇使用引用還是指標取決於具體情況。

最後

為了方便其他裝置和平臺的小夥伴觀看往期文章:

微信公眾號搜尋:Let us Coding,關注後即可獲取最新文章推送

看完如果覺得有幫助,歡迎點贊、收藏、關注

相關文章