⑴new動態分配儲存空間如:
int *p=new int;
int *p=new int [10]; //動態陣列的大小可以是變數或常量;而一般直接宣告陣列時,陣列大小必須是常量
又如:int *p1=new int(10); //動態分配用於存放整型資料的記憶體空間,將初值10寫入該記憶體空間,並將首位址值返回指標p1;
double *p2=new double [100]; //動態分配具有100個雙精度實型資料元素的陣列,同時將儲存區的首位址返回給指標變數p2;
對於生成二維及更高維的陣列,應使用多級指標。
為二維陣列開闢空間:
int **p=new int* [row]; //row是二維陣列的行,p是指向乙個指標陣列的指標
for(int i=0; ip[i]=new int [col]; //col是二維陣列的列,p是指向乙個int陣列的指標
刪除這個二維陣列:
for(int i = 0; i < row;i++)
delete p[i];//刪除二維陣列每行內的資料(每行內又是乙個有col個元素的陣列,p[i]指向該陣列的首位址)
delete p;//
最後再銷毀指標陣列
⑵使用完動態無名變數後應該及時釋放,要用到 delete 運算子
delete p; //釋放單個變數
delete [ ] p;//釋放陣列變數(不論陣列是幾維)
注意:
c語言沒有多維陣列,只有一維陣列,看到的2維陣列只是乙個一維陣列,陣列中的每個元素都是乙個一維陣列。
new不能開闢二維陣列,只能開闢一段連續的空間。所以應該把p定義成指標陣列,再為裡面每個元素開闢空間。
int **p2=new int[3][3]和int *p2=new int[3][3]都是錯誤的
int [3][3]等價於陣列指標int(*)[3]
int**p等價於指標陣列int*[3]
二級指標和野指標
1.關於二級指標 例如 char p 這裡定義了乙個二級指標變數p,p是乙個指標變數,毫無疑問在32位系統下佔4個byte。它與一級指標不同的是,一級指標儲存的是資料的位址,二級指標儲存的是一級指標的位址,布局如下 2.陣列引數 和等效的 指標引數 a.void fun char a 3 4 等效為...
一級指標和二級指標
通常用作函式的輸入引數,因為一級指標作為函式引數,在呼叫的時候,實參和形參是不同的記憶體空間,只是,這個記憶體空間存放的指標指向的是同一塊位址,所以形參在函式執行中可以訪問實參指向的記憶體空間,但是形參的指向的改變並不能影響實參。總結一句話 一級指標做函式引數,在函式內做形參做重新指向並 不會影響實...
指標與二級指標
int num 10 int p1 int p2 p1 指標的指向結構如下圖所示 0x4000 0x3000 p2 0x2000 p1 num p2 表示的是儲存p2指標的位址 p2 表示的是p2指向的位址,即指標p1存放的位址 p2 表示指標p2指向位址中所存的值,即指標p1指向的位址,即變數nu...