程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> 關於VC++ >> Pointers與References(三)

Pointers與References(三)

編輯:關於VC++

16.5 空指針

還記得可以怎樣指定一個字符或串為 null 嗎? 如果記不得了, 看看這裡吧。串中的 null 字符表示串的結尾, 但是, 如果一個指針被指定到 null 指針, 則它什麼也沒有指向。 空指針常常用 0 或 null 結束。空指針常常用於邏輯操作中的 and/or 條件中 #include <iostream.h>
int main()
{
 int x = 12345;
 int* px = &x;
 while (px) {
  cout << "指針 px 指向了某些東西\n";
  px = 0;
 }
 cout << "指針 px 指向了沒有說明的 null!\n";
 return 0;
}

如果指針 px 非 null, 則它指向了一些東西, 但是, 如果指針是 null, 則它沒有指向任 何東西。當你必須測試指針的狀態以確定它是否有值時, 空指針非常有用。

16.6 動態內存分配

你可能很想知道程序員在運行程序前不知道需要多少內存的情況下, 如何有效地分配內存 。這就是動態內存分配的有趣的開始。

在數章之前, 我們學習了用 "address of" 操作符指定指針, 因為它以指針格 式返回變量或常量在內存中的地址。現在, "address of" 操作符已經不是你可用 於指定指針的唯一的操作符了。在 C++ 中你還可以用另一個操作符來返回指針, 這就是 new 操作符。new 操作符允許程序

員為特定數據, 結構, 類等分配內存, 並以指針形式返回分配內存的地址。new 操作符作 為右值使用, 與 "address of" 操作符類似。看看在以下代碼中 new 操作符是如 何工作的:

int n = 10;
SOMETYPE *parray, *pS;
int *pint;
parray = new SOMETYPE[n];
pS = new SOMETYPE;
pint = new int;

依靠指定一個指針到一個已分配的內存段, 而不是使用變量定義, 你基本上不再是一個 "中間人" (變量定義。現在, 你可以動態分配內存而不必知道你應該定義的變量 的數量。如果看看上面的代碼片段, 你也可以用 new 操作符來為數組分配內存, 這在我們想 維護大的數組或類的大小時處理起來相當方便。因為 new 操作符產生的指針指向的內存也可 以被 "釋放", 不是 destroyed 而是從你的指針中釋放。delete 操作符用在指針 的前面並釋放指針所指的內存地址:

delete parray;
delete pint;

由 parray 和 pint 所指向的內存就被釋放了, 這在維護大的數組時是件非常好的事, 避 免了內存的洩漏。何分配的內存都需要正確地釋放否則將會造成內存洩漏而且你的程序將不 能有效地運行。基本上, 每次你使用 new 操作符後, 都應該在退出用 delete 操作符來釋放 內存。但是 delete 操作符, 不僅僅可用於 delete 一個由 new 操作符分配的指針, 也可用 於 “delete”一個空指針, 這就防止了刪除未分配內存的企圖 (這種行為是可以 通過編譯的)。new 和 delete 操作符不必在相同的函數或代碼塊中聯合使用。通常可以在一 個函數中分配內存而在另一個函數中釋放內存。(待續)

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved