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

C 語言中 NULL 與整數賦值的常見誤區

     編輯:程式設計綜合問答

錯誤代碼

int i = 10;
int *p = &i;
*p = NULL; // 編譯錯誤:將指針賦值給整數未作類型轉換

錯誤本質

  • NULL 是 空指針常量,本質是 (void*)0 或 0(視編譯器實現)。
  • *p 類型為 int,指針類型不能直接賦值給整型變量(反之亦然)。
  • 等價於 i = NULL,同樣非法。

正確用法對比

場景正確寫法說明
指針置空p = NULL;指針變量本身賦值
整數置零*p = 0; 或 i = 0;整數變量賦整數字面值
檢查指針有效if (p != NULL)指針比較

進階:NULL vs 0 vs nullptr (C++11)

  • C 標準庫定義 #define NULL ((void*)0),主要用於指針上下文。
  • C++98 建議用 0,因 void* 隱式轉換較弱。
  • C++11 引入 nullptr(類型 std::nullptr_t),徹底解決重載決議歧義,**現代 C++ 首選 nullptr**。

最佳實踐

  1. 僅在指針初始化、賦值、比較時使用 NULL/nullptr。
  2. 整數變量永遠用 0。
  3. 啟用編譯器警告(-Wall -Wextra / /W4),可捕獲此類隱式轉換。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved