
#include
using namespace std;
int main() {
int i = 5; // 普通整數變數
int *p = &i; // 指標 p 保存 i 的地址
cout << "變數 i 的值: " << i << endl;
cout << "指標 p 指向的值 (*p): " << *p << endl;
cout << "指標 p 保存的地址 (p): " << p << endl;
cout << "指標 p 自身的地址 (&p): " << &p << endl;
return 0;
}
| 輸出項目 | 範例值 | 含義 |
|---|---|---|
| i 的值 | 5 | 變數本身的值 |
| *p | 5 | p 指向的記憶體內容 = i 的值 |
| p | 0x7ffd... (某十六進制位址) | i 在記憶體中的位置 |
| &p | 0x7ffd... (另一十六進制位址) | 指標變數 p 自己在記憶體中的位置 |
int **pp = &p; // 指向指標的指標
int *const q = &i; // q 本身不可改 (常量指標)
const int *r = &i; // *r 不可改 (指向常量的指標)
const int *const s = &i; // 兩者皆不可改
int arr[3] = {1,2,3};
int *pa = arr; // 陣列名退化為首元素地址
// pa[0] == arr[0], *(pa+1) == arr[1]
int *p; *p = 10; // 錯誤 → int *p = nullptr; 或初始化指向合法記憶體。delete p; ... *p = 5; 釋放後仍使用。delete p; p = nullptr;int *p = (int*)malloc(sizeof(double)); 存取越界/對齊問題。p + 1 移動 sizeof(*p) 位元組,非 1 位元組。std::unique_ptr、std::shared_ptr,RAII 自動管理生命週期。new/delete,改用 std::make_unique/make_shared。nullptr 取代 NULL/0,型別安全。指標是 C/C++ 靈活與危險的雙面刃。徹底理解「地址、值、指標自身位址」三者關係,配合現代智慧指標與 RAII,即能在享受效能優勢的同時,將記憶體錯誤降至最低。