最簡單理解指標與參考的方式是從賦值運算式切入:
x = 1; // 變數儲存資料,必須在等號左側 (lvalue)
1 = x; // ❌ 編譯錯誤:字面常數 1 無記憶體位址,不可為 lvalue
lvalue (左值) 代表擁有記憶體位址的實體,可存放資料;rvalue (右值) 代表資料值本身。C++ 核心在於記憶體管理,操作位址的兩大機制即為 指標 與 參考。
指標與參考是特殊變數,其值為記憶體位址。區別於 int、double、char 等儲存資料本身的型別,指標/參考儲存的是已宣告並賦值的資料的位址。兩者機制不同:語法不同、慣用法不同、能力邊界不同。
*SOMETYPE* sometype;
int* x;
&SOMETYPE& sometype;
int& x;
// 指標以下等價
SOMETYPE* sometype;
SOMETYPE * sometype;
SOMETYPE *sometype;
// 參考以下等價
SOMETYPE& sometype;
SOMETYPE & sometype;
SOMETYPE &sometype;
&)雖然宣告語法相似,但賦值方式截然不同。C++ 提供 & 運算子 (Address-of) 獲取變數、常數、陣列元素的位址,返回對應型別的指標:
SOMETYPE* x = &sometype; // 必須作為 rvalue (等號右側) 使用
&sometype 在運算式中 → Address-of 運算子,返回指標。SOMETYPE& ref = sometype; 在宣告中 → 參考型別宣告,綁定別名。編譯器依上下文輕易區分兩者。
若函數接受指標參數,可直接用 & 傳遞變數位址,無需額外宣告指標變數:
SOMETYPE MyFunc(SOMETYPE* x) {
std::cout << *x << std::endl;
}
int main() {
SOMETYPE i;
MyFunc(&i); // 直接傳遞 i 的位址
return 0;
}
下一篇將詳細對比指標與參考的賦值規則、解參考操作、指標算術與函數傳遞機制。