void funb(int** x) {
int* p = (int*)x; // 錯誤:將 int** 強轉為 int*
*p = 300; // 只解引用一次,修改的是指針變量地址處的值,非目標 int
}
int i=100; funa(&i); → funa 參數 int* x 指向 i。funa 內:int* i = x; → *i=200 修改 i 為 200。funb(&i):傳遞 i 的地址,類型 int**,指向存儲 i 地址的變量。funb 參數 int** x 指向該地址。int:**x 或 *(*x)(兩次解引用)。
void funb(int** x) {
// 方法 1:直接雙重解引用
**x = 300;
// 方法 2:臨時變量保持類型清晰
int* p = *x; // p 指向目標 int
*p = 300;
// 方法 3:若必須用 int* 接收參數(不推薦)
// int* p = (int*)x; // 強轉後 p 指向「指向 int 的指針」
// *(int**)p = 300; // 再次強轉回 int** 解引用
}
指針強轉不改變內存佈局。int** 內存中存儲的是「指向 int 的指針的地址」,無論轉為何種類型,要到達目標 int 必須解引用兩次。建議保持類型匹配,避免強轉;必要時用 static_cast (C++) 限制轉換範圍。