
- 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++ 指標與陣列
指標和陣列密切相關。事實上,在許多情況下,指標和陣列是可以互換的。例如,指向陣列開頭的指標可以使用指標算術或陣列樣式索引來訪問該陣列。考慮以下程式:
#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}; for (int i = 0; i < MAX; i++) { *var = i; // This is a correct syntax var++; // This is incorrect. } return 0; }
將指標運算子 * 應用於 var 是完全可以接受的,但修改 var 的值是非法的。原因是 var 是一個指向陣列開頭的常量,不能用作左值。
因為陣列名會生成一個指標常量,所以只要不修改它,它仍然可以在指標樣式表示式中使用。例如,以下是將 var[2] 的值賦為 500 的有效語句:
*(var + 2) = 500;
上述語句有效,並且可以成功編譯,因為 var 沒有被改變。
cpp_pointers.htm
廣告