// source code
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
/*
* char (*point)[4] // 数组指针。 a[3][4] // 先申明二维数组,用它来指向这个二维数组
* char *point[4] // 指针数组。 a[4][5] // 一连串的指针
*/
void length()
{
char *pa[5];
char (*ptr)[5];
printf("sizeof(*pa[5]) = %ld\n", sizeof(pa)); // 40 (64bit系统)
printf("sizeof((*ptr)[5]) = %ld\n", sizeof(ptr)); // 8 (64bit系统)
}
/*
* 指针数组 (指向列)
*/
void pointer_array()
{
int a[3][3] = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
int (*ptr)[3] = a;
printf("%d %d\n", (*ptr)[1], (*ptr)[2]); // 2 3
++ptr;
printf("%d %d\n", (*ptr)[1], (*ptr)[2]); // 5 6
}
/*
* 数组指针 (指向行)
*/
void array_pointer()
{
int a[3][3] = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
int *pa[3] = {a[0], a[1], a[2]};
int i;
for(i = 0; i < 3; i++)
printf("%d ", *pa[i]); // 1 4 7
}
int main()
{
length();
pointer_array();
array_pointer();
}