C 語言只有值傳遞:實參的值被複製給形參,函數內修改形參不影響實參。
void swap(int a, int b) {
int t = a; a = b; b = t; // 僅交換了副本
}
int main() {
int x=1, y=2;
swap(x, y); // x,y 不變
}
void swap(int *a, int *b) {
int t = *a; *a = *b; *b = t; // 通過地址修改原內存
}
int main() {
int x=1, y=2;
swap(&x, &y); // 傳遞變量地址
// x=2, y=1
}
main 棧幀: x: 1 y: 2
│ │
▼ ▼
swap 棧幀: a: &x b: &y (指針變量)
│ │
▼ ▼
內存: *a=1 *b=2 ← 真正被修改的位置
**p)或返回新指針。&。const int *p vs int *const p:前者限制指向的值不可改,後者限制指針指向不可改。