首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C 語言指針交換陷阱:為什麼 int *temp 錯誤而 int temp 正確?

     編輯:程式設計綜合問答

錯誤代碼

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 導致洩漏。交換值類型數據,直接用值類型臨時變量最簡潔高效。

記住:交換值用值類型,交換地址用指針類型。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved