1.什麼叫數組指針?
數組指針:一個指向一維或者多元數組的指針。
比如:int * b=new int[10];指向一維數組的指針b ; 注意,這個時候釋放空間一定要delete [] ,否則會造成記憶體洩露,b 就成為了空懸指針。
int (*b2)[10]=new int[10][10]; 注意,這裡的b2指向了一個二維int型數組的首位址。
注意:在這裡,b2等效于二維數組名,但沒有指出其邊界,即最高維的元素數量,但是它的最低維數的元素數量必須要指定!就像指向字元的指針,即等效一個字元串,不要把指向字元的指針說成指向字元串的指針。這與數組的嵌套定義相一緻。
int(*b3) [30] [20]; //三級指針――>指向三維數組的指針;
int (*b2) [20]; //二級指針;
b3=new int [1] [20] [30];
b2=new int [30] [20];
兩個數組都是由600個整數組成,前者是隻有一個元素的三維數組,每個元素為30行20列的二維數組,而另一個是有30個元素的二維數組,每個元素為20個元素的一維數組。
删除這兩個動态數組可用下式:
delete [] b3; //删除(釋放)三維數組;
delete [] b2; //删除(釋放)二維數組;
再次重申:這裡的b2的類型是int (*) ,這樣表示一個指向二維數組的指針。b3表示一個指向(指向二維數組的指針)的指針,也就是三級指針.
2.什麼叫指針數組?
指針數組:一個數組裡存放的都是同一個類型的指針,通常我們把他叫做指針數組。
比如 int * a[10];它裡邊放了10個int * 型變量,由于它是一個數組,已經在棧區配置設定了10個(int * )的空間,也就是32位機上是40個byte,每個空間都可以存放一個int型變量的位址,這個時候你可以為這個數組的每一個元素初始化,或者單獨做個循環去初始化它。
舉例:聲明一個指針數組如下所示,可了解為:首先,其為一個3維數組,數組裡存放的是傳回int型的指針。
1. int *p[3];
2. p[0] = new int[4];
3. p[1] = new int[5];
4. p[2] = new int[6];
5.
6. delete p[0];
7. delete p[1];
8. delete p[2];
9.
3.什麼是函數指針?
關于函數指針,我想在我們可能需要寫個函數,這個函數體内要調用另一個函數,可是由于項目的進度有限,我們不知道要調用什麼樣的函數,這個時候可能就需要一個函數指針;
int a();這個一個函數的聲明;
int (*b)();這是一個函數指針的聲明;
讓我們來分析一下,左邊圓括弧中的星号是函數指針聲明的關鍵。另外兩個元素是函數的傳回類型(void)和由邊圓括弧中的入口參數(本例中參數是空)。注意本例中還沒有建立指針變量-隻是聲明了變量類型。
目前可以用這個變量類型來建立類型定義名及用sizeof表達式獲得函數指針的大小:
unsigned psize = sizeof (int (*) ()); 獲得函數指針的大小
為函數指針聲明類型定義 typedef int (*PFUNC) (); //PFUNC是一個函數指針,它指向的函數沒有輸入參數,傳回int。使用這個類型定義名可以隐藏複雜的函數指針文法,就我本人強烈建議我們大内弟子使用這種方式來定義。