指標陣列,從名字就可以看出,指標陣列本質上陣列,組內元素由指標構成。下面列出幾種常見的指標陣列型別用來加深大家對指標陣列的理解;
int *a
[10];
char *b
[10];
char **c[10];
陣列指標是指標,表示乙個指向陣列的指標,在32位系統下佔4個位元組。下面列出的就是陣列指標。
int (*p)[10];
int (*)[10] p2;
區分指標陣列還是陣列指標的方法就是首先明白「[ ]」的優先順序要高於「」的有優先順序,」()」的優先順序高於「[ ]」,在「int* (p)[10]」中,和p構成乙個指標的定義,指標變數名為p,int修飾的是指標指向的陣列的元素。陣列在這裡沒有名字,是個匿名陣列。p2中int (*)[10]是指標型別,p2是指標變數。
指標和陣列是具有本質上的區別的。
a), char* (*fun1)(char *p1,char*p2);
b), char**fun2(char*p1,char*p2);
c), char* fun3(char*p1,char*p2);
上述三個表示式的含義分別為:
a):這裡的fun1不是函式名,而是乙個指標變數,指向乙個函式。這個函式有兩個指標型別的引數,函式的返回值也是乙個指標。
b):fun2是函式名,p1和p2是指標型別引數,函式的返回值是乙個char**型別的二級指標。
c):fun3是函式名,p1和p2是引數,型別為char*,函式的返回型別也為char *。
void function()
int main()
首先void(*p)()是定義了乙個指標變數p,p指向乙個函式,這個函式的引數和返回值都是void。&p是求指標變數p本身的位址,這是乙個32位進製的2進製常數(32位系統)。
(int*)&p表示將位址強制型別轉換成指向int型別的指標。(int)founction表示將函式的入口位址強制轉換成int型別的資料。
(int )&p = (int)founction表示將函式入口的位址賦給指標變數p。
(*p)()表示對函式進行呼叫。
清楚了函式指標的呼叫方法後,我們可以再來試一試了解乙個例子:(* (void( *)())0)();
我們可以嘗試分步對這個表示式進行解析:
第一步:void(*)(),這是乙個函式指標型別,這個函式沒有引數和返回值。
第二步:(void(*)())0,這是把0強制轉換為函式指標型別,0是乙個位址,也就是說乙個函式存在首位址為0的一段區域內。
第三步:((void()())0),這是取0位址開始的一段記憶體裡面的內容,其內容就是儲存在首位址為0的一段區域的函式。
第四步:((void()())0)()表示對該函式進行呼叫。
現在我們可以定義乙個函式指標類似「char* (* p)(char * src);」,期中p為函式指標,既然p是指標,那麼p就可以儲存到乙個陣列裡面。例如「char *( *p[3]) (char *src);」就是定義了乙個函式指標陣列,這是乙個陣列,陣列名為p,陣列內儲存了3個指向函式的指標,這些指標指向一些返回值為字元的指標,引數為指向字元的指標的函式。
函式指標陣列的指標歸根結底也是乙個指標,裡面用來存放乙個陣列,這個陣列裡面存放的是指向函式的指標。下面就頂乙個簡單的函式指標陣列的指標:
char*(*(*p)[3])(char* src);
在這裡p是乙個指標,指向乙個包含了3個元素的陣列,這個陣列裡面存放了指向函式的指標,這些指標指向一些返回值型別為指向字元的指標,引數為乙個指向字元指標的函式。 關於指標陣列和陣列指標
陣列指標 舉例說明 int p 5 陣列指標的英文是 a pointer to an array 也就是指向陣列的指標。通過int p 5 p 是宣告,宣告p是乙個指標,它指向的內容是int 5 這個陣列。簡單運用下 int a 5 int p 5 a 這裡的意思也就是a是個五位的陣列,而p指向陣列...
關於「指標陣列」和」陣列指標「
我一直弄不清楚 指標陣列 和 陣列指標 的區別,最近這段時間看到了一些關於陣列和指標的關聯和區別的資料,然後總結了下這兩個概念的區別,以備後續檢視。1 區分指標陣列和陣列指標 short ptr 10 指標陣列,可理解為 存放指標的陣列 short ptr1 10 陣列指標,可理解為 指向陣列的指標...
關於指標和陣列
1.指標陣列 形如int arr 10 的型別,指標陣列可以簡單理解為存放指標變數的陣列。2.陣列指標 形如int arr 10 的型別,陣列指標可以簡單理解為指向陣列的指標。就上面所介紹的兩種型別來看,有一種較為簡單的記憶方法,看 和誰先和arr接觸,若是先和 接觸,即為陣列指標,若是先和接觸,即...