1.申明和初始化指標
int * p1;
這表明 *p1的型別為int 。由於*操作符被用於指標,因此p1變數本身必須是指標。可以這樣說,p1是指標(也即是位址空間),*p1是int,而不是指標;
順便說一下,*操作符兩邊的空格是可選的.傳統上c程式設計師用 int *p1,而很多c++程式設計師用int* p1;
可以在申明語句中初始化指標,在這種情況下,被初始化的是指標,而不是它所指向的值.也就是說下面的語句:
int p1=5;
int *pt=&p1;
將pt(而不是*pt)的值設定為&p1.
2.指標的危險
int *p1;
*p1=12;
p1確實是乙個指標,但他指向那裡呢,上敘**並沒有將位址賦給p1,那麼12將被放在**呢,我們不知道.
3.用new來分配記憶體
指標真正的用武之地在於,在執行階段分配未命名的記憶體以儲存值,在這種情況下只能用指標來訪問記憶體.
下面是這樣的乙個範例:
int *p1=new int;
*p1=1000;
陣列:int *p1=new int[10];
p1代表的是位址,而*p1則代表乙個值;
對於陣列p1來講,new操作符返回第乙個元素的位址,在這個例子中,該位址被賦給指標p1;
計算機可能會由於沒有足夠的記憶體而無法滿足new的請求,在這種情況下,new將返回0;
4.用delete來釋放記憶體
delete操作符,他使得在用完記憶體後,能夠將其歸還給記憶體池,這是通向最有效的使用記憶體的的關鍵的一步
int *ps = new int;
delete ps;
這將釋放ps指向的記憶體,但不會刪除指標ps本身,也就意味著可以將指標ps重新指向另外乙個新分配的記憶體塊;
注意:一定要配對的使用new和delete,否則將發生記憶體洩露,也就是說被分配的記憶體再也無法使用了.
int *p1=new int[10];
delete p1;
5.指標與陣列
#include
int main()
下面是程式的輸出:
p3[1] is 0.3
now p3[0] is 0.3
c 指標和自由儲存空間
本博文為本人閱讀c primer plus第4章復合型別後做的小筆記,僅記錄本人不熟悉或者容易犯錯的地方 指標是乙個變數,儲存的是值得位址,而不是值本身 位址運算子 可以獲得變數的所在位址 指標名表示的是位址,運算子被稱為間接值 indirect value 或者解除引用 dereferencing...
8 C 指標和自由儲存空間
8 c 指標和自由儲存空間 電腦程式在儲存資料時必須跟蹤3中基本屬性。指標是 乙個變數,其儲存的是值得記憶體位址 對於常規變數的位址,只需要對變數應用位址運算子 就可以獲得它的位置 例如,如果home是乙個變數,那麼 home就是他的位址。include stdafx.h include 引用庫函式...
指標和自由儲存空間 陣列 指標算術
第4章,第7 8節 指標和自由儲存空間 是變數,儲存的是值的位址 int p1,p2 中 p1表示指標,而p2表示整型變數 指標本身的長度通常相同 建立時,會分配用來儲存指標位址的記憶體,但不會分配用來儲存指標所指向的資料的記憶體 指標不是整型,不能簡單地將整數賦給指標 new是從heap或free...