(1)已知第二维
char (*a)[N];//指向数组的指针
a = (char (*)[N])malloc(sizeof(char *) * m);
printf("%d\n", sizeof(a));//4,指针
printf("%d\n", sizeof(a[0]));//N,一维数组
free(a);
(2)已知第一维
char* a[M];//指针的数组 int i;
for(i=0; i<M; i++)
a[i] = (char *)malloc(sizeof(char) * n);
printf("%d\n", sizeof(a));//4*M,指针数组
printf("%d\n", sizeof(a[0]));//4,指针
for(i=0; i<M; i++)
free(a[i]);
(3)两维都未知
char **a;
int i;
a = (char **)malloc(sizeof(char *) * m);//分配指针数组
for(i=0; i<m; i++) {
a[i] = (char *)malloc(sizeof(char) * n);//分配每个指针所指向的数组}
printf("%d\n", sizeof(a));//4,指针
printf("%d\n", sizeof(a[0]));//4,指针
for(i=0; i<m; i++) {
free(a[i]);
}
free(a);