int k=7, m=5;
void f(int **s) {
int *t = &k;
*s = &t; // 修改 s 指向的指針值(即 *s)
*s = &m; // 再次修改 *s
printf("%d,%d,%d,", k, *t, **s); // 7,5,5
}
int main() {
int i=3, *p=&i, **r=&p;
f(r);
printf("%d,%d,%d\n", i, *p, **r); // 3,3,3
}
房間號 = 地址,房間裡的紙條 = 值。
`r` 存放 `p` 的房間號;`p` 存放 `i` 的房間號。
`f` 拿到 `r` 的房間號,進屋把 `p` 手裡的紙條換成 `m` 的房間號。
但 `r` 手裡的紙條(存 `p` 房間號)沒換,主函數仍按 `r`→`p`→`i` 找到 3。
指針作為參數傳遞,函數可修改指針指向的內容,不可修改調用者的指針變量本身(除非傳指針的指針並修改解引用後的值)。本例中 `f` 修改了 `p` 的指向,但 `r` 仍指向 `p`,最終 `**r` 取決於 `p` 當前指向。