int (*p)[4]; //数组指针
数组指针就相当于一次声明了一个指针。只不过这个指针指向很特别,是一个数组。
[]优先级大于*,故数组指针声明时要加()。
数组指针自增(*p++)时,指针指向移动sizeof(类型)。
其实上句在其他类型指针也适用。
如int *p;
//指针指向了int,就是整型指针,整型指针有啥特点?就是能保存整形变量的地址。有啥用途?就是p++的时候能指向下一个int型数。所以了,经常用指针指向一个数组。因为他们都是int型的,所以推导出步长,整型指针的步长为sizeof(int),即4字节
//同理可以得出什么float型指针,char型指针什么的。。。
同理就得出了数组指针,特点 :保存数组首地址。用途:p++的时候能指向下一个数组。所以,要用它来指向一个二维数组。因为二维数组里的每一个元素都是相同类型的(都是一个int型数组),所以推导出步长了 sizeof(int[4]),即16
/说白了就一指针,指向了数组类型
如:
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++;
}
数组指针下标自增与本身自增的区别
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++; }