int *a; // 一个整形指针, 本质上属于指针;
int a[5]; //一个非常普通的整形数组,本质上属于数组
int *a[5]; // 指针数组, 和整形数组类似,本质上还是数组, 只不过数组的元素是5个整形指针
int (*p)[5];// 数组指针, 一个指向数组的指针;本质上属于指针, 只不过这个指针非常特殊, 它指向一个数组;
#include <stdio.h>
#include <stdlib.h>
int main()
{
int array[5] = {0,11,22,33,44};
int xx[3][5] = {{0,1,2,3,4}, {5,6,7,8,9},{10,11,12,13,14}};
int (*p)[5] ;
int i;
p = (int (*)[])array;
printf("array[]: \n\t");
for(i=0;i<5;i++)
printf("%d ", (*p)[i]);
printf("\n\n");
p = xx;
printf("array[][]:\n\t");
for(i=0;i<5;i++)
printf("%d ", (*p++)[0]);
printf("\n\n");
p = xx;
printf("array[][]:\n\t");
for(i=0;i<5;i++)
printf("%d ",(*p+i)[0]);
printf("\n");
}
haha@ubuntu:~/test$ ./a.out
array[]:
0 11 22 33 44
array[][]:
0 5 10 -369999872 -1208983552
array[][]:
0 1 2 3 4
需要注意的是:
整形指针的步长是:sizeof(int)
数组指针的步长是: sizeof(int) * array_length, 在代码中*p++每次跳跃4*5=20字节; 通常,使用指针数组配合二维数组来使用。
数组指针的初始化: int (*p)[5] = (int (*)[])array; 数组指针用数组来初始化