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)
然而,指標是一種將記憶體地址作為其值的變數。
指標變數指向相同型別的資料型別(如 int
或 string
),並使用 *
運算子建立。將正在處理的變數的地址分配給指標:
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
,關注後即可獲取最新文章推送
看完如果覺得有幫助,歡迎點贊、收藏、關注