首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> C++ 入門

指針知識進階:void 指針、無效指針與空指針詳解

     編輯:C++ 入門

1. void 指針(通用指針)

  • 定義:void* 可指向任意類型對象,表示「無類型指針」。
  • 特性:不能直接解引用(*p 錯誤),不能指針算術(p+1 錯誤),因類型大小未知。
  • 用途:泛型函數參數(如 memcpy)、線程函數參數、C 接口回調。
  • 轉換:隱式轉換自/向任意對象指針(C++ 需顯式 static_cast)。

2. 無效指針

  • 定義:指向無效內存地址的指針。常見來源:
    • 未初始化的指針(野指針)。
    • 已釋放內存的指針(懸垂指針)。
    • 超出數組邊界的指針。
  • 行為:持有無效指針本身不崩潰,**解引用**才導致未定義行為(崩潰、數據損壞、看似正常)。
  • 防範:初始化為 nullptr,delete 後置 nullptr,智能指針自動管理。

3. 空指針

  • 定義:明確表示「不指向任何對象」的指針值。
  • 表示:C++11 nullptr(類型 nullptr_t),C++98 NULL(宏,通常為 0 或 (void*)0),整數字面量 0。
  • 性質:所有空指針比較相等。if (p) 判斷非空。
  • 區別:空指針是值,void 指針是類型。void* p = nullptr; 合法。

對比總結表

概念本質可解引用典型用途
void*類型否泛型傳遞
無效指針狀態(危險)導致 UBBug 來源
空指針特殊值(安全)否(保證安全)初始化、判空、釋放後置空

最佳實踐

  1. 指針聲明即初始化:T* p = nullptr;。
  2. 優先用智能指針避免手動管理。
  3. C++11 統一用 nullptr 替代 NULL/0。
  4. delete p; p = nullptr; 成對出現(若不用智能指針)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved