int *a[4]; //指针数组
指標陣列就相當於一次宣告了多個指標。數組的每一個元素都是一個指標。很好理解,下面主要看數組指標
int (*p)[4]; //数组指针
陣列指標就相當於一次宣告了一個指標。只不過這個指標指向很特別,是一個陣列。
[]優先權大於*,故數組指標宣告時要加()。
範例1:
#include<stdio.h>#include<stdlib.h>void main() { //数组指针的用法,用处。 int b[16]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}; int (*p)[4]; //该语句是定义一个数组指针,指针步长为4个int即16位。 //int *p2=&b; p=&b; int i=0; while(i<16) { printf("%d\t",(*p)[i]); //printf("%d\t",*p2++); i++; } }
printf("%d\t",(*p)[i]);遍歷輸出陣列b;
陣列指標就相當於舞王殭屍一樣,帶了小弟,n就是小弟的個數,透過下標值能直接訪問到具體哪一個小弟,即數組裡哪一個數
數組指針下標自增(i )的時候,指標指向不變。
這裡直接用整形指標就可以實現,而且更方便簡潔。參見上面被註釋部分。
例2:把例1的while()語句換掉。
while(i<4) { printf("%d\t",(*p++)[0]); i++; }
例2輸出1 5 9 13,相當於指標一次移動了4個int.16個位元組。
陣列指標自增(*p )時,指標指向移動sizeof(型別)。
其實上句在其他型別指標也適用。
如int *p;
//指針指向了int,就是整數指針,整數指標有啥特點?就是能保存整形變數的位址。有啥用途?就是p 的時候能指向下一個int型數。所以了?常用指標指向一個陣列。因為他們都是int型的,所以推導出步長了?整數指針的步長為sizeof(int),即4位元組
//同理可以得到什麼float型指針,char型指針什麼的。 。 。
同理就得出了數組指針,特點?儲存數組首位址。用途? p 的時候能指向下一個陣列。所以了?要用它來指向一個二維數組。因為二維數組裡的每個元素都是相同類型的(都是int型數組),所以推導出步長了? sizeof(int[4]),即16
//說白了就一指針,指向了數組類型
#例3:數組指針指向二維數組。
#include<stdio.h>#include<stdlib.h>void main() { int a[3][4]={{1,2,3,4},{11,12,13,14},{21,22,23,24}}; int (*p)[4]; //该语句是定义一个数组指针,指针步长为4个int即16位。 p=&a; int i=0; while(i<3) { //printf("%d\t",(*p)[i]); //数组指针,指向的是一个数组整体,相当于指针也带了下标,当执行i++操作时,下标+1,得到该数组的下一个元素, //在该例中,指针没有位移,所以依次输出为1 2 3 printf("%d\t",(*p++)[0]); //整型数组类型的指针,指向的是一个数组整体,当执行*p++操作时,指针位移该数组长度的位数 //在该例中,即指针位移4个int的长度,所以输出是1 11 21 i++; } }
推薦教學:《C影片教學》
以上是數組指針的用法有哪些?的詳細內容。更多資訊請關注PHP中文網其他相關文章!