指標運算的一點小結

2021-07-30 22:18:22 字數 1107 閱讀 9461

詳情看**,有詳細注釋。特別強調的是當 p 指向乙個變數比如 a 時, 我們發現儘管 delete p 了,但是似乎依然可以得到 a 的值, 這其實是錯誤的,比如 a 最初為 5, delete運算後令 a = 10, 但此時 *p還是等於5. 

delete的時候,系統只是將指標指向 的堆空間**,但是沒有將這個指標變數的值賦為null,所以delete乙個指標後應將其賦為null, 不然容易導致野指標的出現。

delete 乙個指標變數後一定要將該變數賦為null!!!

帶指標的結構體比如二叉樹等,一定要在構造的時候先把指標全部置為null, 否則出現段錯誤,野指標等不可預知的錯誤。

#include #define endl "\n"

using namespace std;

int main();

int *ptr = arr;

// ptr中是arr[0]的位址 &ptr是ptr變數的位址 *ptr是ptr指向的arr[0]的值

cout << " ---> ptr &ptr *ptr " << ptr << " " << &ptr << " " << *ptr << endl;

// 不能有形如 &ptr++ 的形式, 位址值不可做此運算

// ptr指向下乙個記憶體單元,單元大小取決於指標型別, 這裡int型則加4(與機器有關),

// 如果是類的物件,那就看該類的乙個物件許多多大的記憶體單元

cout << " ptr++ " << ptr++ << endl;

cout << " ptr " << ptr << endl; // ptr現在指向arr[1]

// (*ptr)++先解指標得到arr[1]再將arr[1]+1

cout << " (*ptr)++ " << (*ptr)++ << endl;

// ptr指向arr[1] arr[1]現在等於3

cout << " ptr *ptr " << ptr << " " << *ptr << endl;

cout << arr[0] << " " << arr[1] << " " << arr[2] << endl;

} return 0;

}

關於WCF的一點小結

wcf核心技術 筆記 wcf的重要性 全球分布式網路的核心是服務,在windows平台上,wcf是提供和使用服務最簡單的方式 遮蔽了負責的底層通訊協議 契約 服務契約 同步請求 響應操作 非同步請求 響應操作 單向操作 雙工操作 資料契約 訊息契約 小結 wcf非常多地利用soap標準來進行契約定義...

對指標的一點感悟

首先來看2張 這個程式是將二維陣列 a 裡面的元素輸出出來,但是左圖給指標賦值可以,但是右圖不行,為什麼?因為p是乙個陣列,對於陣列而言,p是乙個常量,常量的位址是固定的,所以p a相當於給常量賦值,這當然是不行的,語法上就是錯誤,而在左邊,相當於對陣列p裡的元素賦值,元素的位址雖然確定了,但是元素...

關於指標的一點思考

指標是乙個變數,所不同的是,它存的是位址。因為資料型別決定著如何解釋這個位址 位元組數和操作 因此根據的資料型別的不同,指標又有不同的型別。某個物件 a 的位址範圍為 a,a size n 其中size n是a所佔的位元組數 比如乙個一維陣列int a 10 位址範圍為 a,a 10 sizeof ...