int *p1, *p2, *temp;
*temp = *p1; // 錯誤:temp 未初始化,解引用野指針
*p1 = *p2;
*p2 = *temp;
int *p1, *p2, temp; // temp 是 int 變量,非指針
temp = *p1;
*p1 = *p2;
*p2 = temp;
| 寫法 | 類型 | 是否需初始化 | 含義 |
|---|---|---|---|
int *temp | 指針 | 必須 | 存放地址,未初始化指向隨機內存 |
int temp | 整數變量 | 自動分配棧內存 | 直接存放數值,無需初始化即可賦值 |
temp = &some_int 或 malloc 分配內存才能解引用。int temp 正確。即使改成 int *temp = malloc(sizeof(int)) 也屬於過度設計,且易忘 free 導致洩漏。交換值類型數據,直接用值類型臨時變量最簡潔高效。
記住:交換值用值類型,交換地址用指針類型。