作者 : 卿笃军
原文地址:http://blog.youkuaiyun.com/qingdujun/article/details/13745797
1) int *p[5] ; 一个指针数组,该数组里面可存放5个int型指针.
小Demo:
- int a=0,b=1,c=2,d=3,e=4;
- int *p[5];
- p[0] = &a;
- p[1] = &b;
- //....
- p[4] = &e;
2) int (*p)[5]; 一个行数不确定,列数为5的数组指针(也叫行指针).
小Demo:
- int a[2][5], b[10][5];
- int (*p)[5];
- p = &a[0];
- p = &b[4];
Demo指针数组:
- #include <stdio.h>
- int main()
- {
- int i = 0;
- int *p[2];//定义一个指针数组 该数组有2个指针
- int a[3] = {1,2,3};
- int b[4] = {4,5,6,7};
- p[0] = a;//第一个指针指向数组a
- p[1] = b;//第二个指针指向数组b
- for (i = 0; i < 3; ++i)
- {
- printf("%d ",*(p[0]+i));
- }
- printf("\n");
- for (i = 0; i < 4; ++i)
- {
- printf("%d ",*(p[1]+i));
- }
- return 0;
- }
- #include <stdio.h>
- int main()
- {
- int array[3][2] = {{1,2},{3,4},{5,6}};
- int (*p)[2];//定义一个二维数组指针 规定二维数组的列数为2 行数不确定
- p = array;
- for (int i = 0; i < 3; ++i)
- {
- for (int j = 0; j < 2; ++j)
- {
- printf("%d ",*(*(p+i)+j));//p+i :第i行的首地址所存放的地址 *(p+i)第i行的首地址 *(p+i)+j 第i行,第j列元素的地址
- }
- printf("\n");
- }
- return 0;
- }
同理:
int *p; -------- int变量指针
int (*p)[10]; -------- int二维数组指针 ,行指针 ,注意和int **p二级指针的区别
int (*p)[10][20]; ----------- int三维数组指针
int (*p)[10][20][30]; ---------- int 四维数组指针
原文地址:http://blog.youkuaiyun.com/qingdujun/article/details/13745797