
- C++ 基礎
- C++ 首頁
- C++ 概述
- C++ 環境搭建
- C++ 基本語法
- C++ 註釋
- C++ Hello World
- C++ 省略名稱空間
- C++ 常量/字面量
- C++ 關鍵字
- C++ 識別符號
- C++ 資料型別
- C++ 數值資料型別
- C++ 字元資料型別
- C++ 布林資料型別
- C++ 變數型別
- C++ 變數作用域
- C++ 多個變數
- C++ 基本輸入/輸出
- C++ 修飾符型別
- C++ 儲存類
- C++ 運算子
- C++ 數字
- C++ 列舉
- C++ 引用
- C++ 日期和時間
- C++ 控制語句
- C++ 決策
- C++ if 語句
- C++ if else 語句
- C++ 巢狀 if 語句
- C++ switch 語句
- C++ 巢狀 switch 語句
- C++ 迴圈型別
- C++ while 迴圈
- C++ for 迴圈
- C++ do while 迴圈
- C++ foreach 迴圈
- C++ 巢狀迴圈
- C++ break 語句
- C++ continue 語句
- C++ goto 語句
- C++ 建構函式
- C++ 建構函式和解構函式
- C++ 複製建構函式
C++ 指標運算
正如您所瞭解的,指標是一個地址,它是一個數值;因此,您可以對指標執行算術運算,就像對數值執行算術運算一樣。有四個算術運算子可以用於指標:++、--、+ 和 -
為了理解指標運算,讓我們考慮一下ptr是一個指向地址 1000 的整數指標。假設 32 位整數,讓我們對指標執行以下算術運算 -
ptr++
ptr 將指向地址 1004,因為每次 ptr 增加時,它將指向下一個整數。此操作將指標移動到下一個記憶體位置,而不會影響記憶體位置的實際值。如果 ptr 指向地址為 1000 的字元,則上述操作將指向地址 1001,因為下一個字元將在 1001 處可用。
遞增指標
我們更傾向於在程式中使用指標而不是陣列,因為變數指標可以遞增,而陣列名稱不能遞增,因為它是一個常量指標。以下程式遞增變數指標以訪問陣列的每個後續元素 -
#include <iostream> using namespace std; const int MAX = 3; int main () { int var[MAX] = {10, 100, 200}; int *ptr; // let us have array address in pointer. ptr = var; for (int i = 0; i < MAX; i++) { cout << "Address of var[" << i << "] = "; cout << ptr << endl; cout << "Value of var[" << i << "] = "; cout << *ptr << endl; // point to the next location ptr++; } return 0; }
當以上程式碼編譯並執行時,會產生如下結果 -
Address of var[0] = 0xbfa088b0 Value of var[0] = 10 Address of var[1] = 0xbfa088b4 Value of var[1] = 100 Address of var[2] = 0xbfa088b8 Value of var[2] = 200
遞減指標
相同的考慮適用於遞減指標,它會將其值減少其資料型別的位元組數,如下所示 -
#include <iostream> using namespace std; const int MAX = 3; int main () { int var[MAX] = {10, 100, 200}; int *ptr; // let us have address of the last element in pointer. ptr = &var[MAX-1]; for (int i = MAX; i > 0; i--) { cout << "Address of var[" << i << "] = "; cout << ptr << endl; cout << "Value of var[" << i << "] = "; cout << *ptr << endl; // point to the previous location ptr--; } return 0; }
當以上程式碼編譯並執行時,會產生如下結果 -
Address of var[3] = 0xbfdb70f8 Value of var[3] = 200 Address of var[2] = 0xbfdb70f4 Value of var[2] = 100 Address of var[1] = 0xbfdb70f0 Value of var[1] = 10
指標比較
可以使用關係運算符(如 ==、< 和 >)來比較指標。如果 p1 和 p2 指向彼此相關的變數,例如同一陣列的元素,則可以有意義地比較 p1 和 p2。
以下程式修改了前面的示例,透過遞增變數指標來實現,只要它指向的地址小於或等於陣列最後一個元素的地址,即 &var[MAX - 1] -
#include <iostream> using namespace std; const int MAX = 3; int main () { int var[MAX] = {10, 100, 200}; int *ptr; // let us have address of the first element in pointer. ptr = var; int i = 0; while ( ptr <= &var[MAX - 1] ) { cout << "Address of var[" << i << "] = "; cout << ptr << endl; cout << "Value of var[" << i << "] = "; cout << *ptr << endl; // point to the previous location ptr++; i++; } return 0; }
當以上程式碼編譯並執行時,會產生如下結果 -
Address of var[0] = 0xbfce42d0 Value of var[0] = 10 Address of var[1] = 0xbfce42d4 Value of var[1] = 100 Address of var[2] = 0xbfce42d8 Value of var[2] = 200
cpp_pointers.htm
廣告