int *p;
p=int * new int[10]指標陣列;陣列的每個元素存放的是指標
p= (int *) new int[10]陣列指標p存放的是陣列的首位址
p=new int[10] p為指向一片連續空間的第一塊位址 delete p釋放第一塊位址delete p為釋放這一片連續空間
我感覺(int *)new int[10]和new int [10]的意義一樣
c++中編譯系統將形參陣列名一律作為指標變數來處理
void sort(int array)==void sort (int *array)
實參陣列名代表乙個固定位址,或者說是指標型常量,因此不能改變
int a[10]
a++錯誤
動態分配空間
new int;開闢乙個存放整數的儲存空間,返回的是指向該儲存空間的位址(即指標)
new int(100);開闢存放乙個整數的儲存空間,並指定該整數的初值為100,返回乙個指向該儲存空間的位址;
new char[10];開闢乙個存放字元陣列(包括10個元素)的空間,返回字元陣列首元素的位址;
new int[5][4]開闢乙個存放二維整型陣列(大小為5*4)的空間。返回首元素的位址
float *p=new float(3.14159)開闢乙個存放單精度數的空間,並指定該數的初值為3.14159,將返回該空間的位址賦給指標變數p
動態分配和靜態分配
動態分配是在堆中開闢的,開闢的記憶體生命週期由程式設計師自己管理
靜態記憶體分配是在棧中,其生命週期由系統維護
乙個程序棧的記憶體遠小於堆的記憶體大小
malloc(size)像系統申請分配指定size個位元組的空間,返回型別是void *,c++ 和c規定,void*型別可以強制轉換為任何其它型別的指標
int *p;
p=(int *)malloc(sizeof(int))需要強轉才能被p接收
指標運算
int a=;
int *p=a;
對於指標的加減運算,標準上來說只允許指標指向陣列內的元素,或者超過陣列長度的下乙個元素。指標運算的結果也只允許指標指向陣列內的元素或超過陣列長度的下乙個元素。
如果a的位址為1000則p++的結果為1004,為什麼不是1001?因為對指標進行加1運算,位址的值會增加當前指標所指向資料型別的長度,因為p是指向int的指標,我的環境中int型別的長度(環境不同長度也可能不同)是4,所以給位址加1,指標前進4
對指標加n,指標前進「當前指標指向的資料型別的長度xn」
字串指標
char *p=「123456」
p和123456都是占用記憶體的,p占用記憶體為sizeof(char *)
p是指向字串首個字元的指標
char s="abc";
s="def"出錯
雖然左邊的陣列名會被解釋為陣列起始元素的位址,但依然不能改變其值。如果可以賦值,就會改變陣列的位址,也就代表著陣列在記憶體空間上移動了。
char *p="abc";
p="def"正確
指標陣列和陣列指標
有關陣列指標和指標陣列容易混淆,本文舉例說明兩者的區別,並加以分析。基本概念 指標 inta 1 int p a 指標的指標 int p2p p 簡單陣列 intb 20 指標陣列 int p 10 指標陣列,含有10個指標元素,即每乙個元素都是乙個指標 陣列指標 int p 10 這個指標用來指向...
指標陣列和陣列指標
理解這兩個概念,當從語言學的語法角度開始,定語 名詞,即 的 語句。指標陣列 指標的陣列 陣列指標 陣列的指標。一 指標陣列 元素為指標的陣列 顧名思義,就是說的首先是乙個陣列吧,然後陣列的元素是指標而已。說明形式為 type pointer array constant1 constant2 co...
指標陣列和陣列指標
該文時自己對指標陣列用法的一點總結,還望高手指點不足原文如下 由於以前對指標陣列不太明白,所以自己寫了 乙個小的測試程式來驗證了自己的猜測,先總結如下 指標陣列,由名字就可以知道的該陣列中的成員都是為指標的。其定義的方法為 char p 5 該初定義乙個包含5個char 型別的陣列的指標,由於p本身...