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

C++ 指標與參考深度解析 (三):空指標與動態記憶體配置

     編輯:關於VC++

16.5 空指標

記得如何將字元或字串指定為 null 嗎?字串中的空字元 '\0' 代表字串結尾。同理,若指標被指定為空指標,則它不指向任何有效物件。空指標常以 0 或 NULL (C++11 起建議使用 nullptr) 表示,廣泛用於邏輯判斷中檢查指標有效性。

#include <iostream>
int main() {
    int x = 12345;
    int* px = &x;
    while (px) {                    // px 非空 (非 0) 進入迴圈
        std::cout << "指標 px 指向了某些東西\n";
        px = 0;                     // 設為空指標
    }
    std::cout << "指標 px 現在指向空指標!\n";
    return 0;
}

當必須測試指標狀態以確定其是否持有有效位址時,空指標檢查極為實用。

16.6 動態記憶體配置

程式設計師常面臨執行前無法預知所需記憶體大小的情況,這正是動態記憶體配置大顯身手之處。

new 運算子:運行期配置記憶體

除了 & (address-of) 運算子,C++ 提供 new 運算子為特定資料、結構、類別配置記憶體,並以指標形式返回位址。new 作為右值使用:

int n = 10;
SOMETYPE* parray, *pS;
int* pint;

parray = new SOMETYPE[n];  // 配置 n 個 SOMETYPE 陣列
pS = new SOMETYPE;         // 配置單一 SOMETYPE 物件
pint = new int;            // 配置單一 int

透過指標直接管理記憶體區塊,而非透過變數定義,你不再是「中間人」。動態配置讓你在不知陣列確切大小的情況下靈活處理大型資料結構。

delete 運算子:釋放記憶體,防止洩漏

new 配置的記憶體必須顯式釋放,使用 delete (單一物件) 或 delete[] (陣列):

delete[] parray;  // 釋放陣列 (必須用 delete[])
delete pint;      // 釋放單一 int

鐵律:每個 new 必須配對 delete,否則導致記憶體洩漏,程式長期運行效能下降甚至崩潰。

進階特性

  • 刪除空指標安全:delete nullptr; (或 delete 0;) 是合法且無操作的,防止誤刪未配置記憶體。
  • 跨函數配置/釋放:new 與 delete 不必在同一函數,可在一個函數配置、另一個函數釋放 (需傳遞指標),極大靈活性。

下一篇將探討函數返回指標/參考的規則與陷阱,以及完整術語總結。

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