#include <stdio.h>
#include <stdlib.h>
#include <stdlib.h>
#define M 3
#define N 5
int (*func())[N]; //声明一个函数func,返回一个[?][N]类型的指针
int main()
{
int (*a)[N];
int i, j;
{
int (*a)[N];
int i, j;
a = func();
for(i = 0; i < M; i++) //遍历二维数组
{
for(j = 0; j < N; j++)
{
printf("%d ", a[i][j]); //printf("%d ", *((*(a+i))+j));
for(j = 0; j < N; j++)
{
printf("%d ", a[i][j]); //printf("%d ", *((*(a+i))+j));
}
printf("/n");
}
free(a);
return 0;
}
free(a);
return 0;
}
int (*func())[N]
{
int (*b)[N]; //声明一个(指向[?][N]类型的二维数组的)指针
{
int (*b)[N]; //声明一个(指向[?][N]类型的二维数组的)指针
int i, j;
b = calloc(M * N, sizeof(int)); //分配空间
if(NULL == b) //NULL写在前面,这样编译器会提示NULL = b这样的错误
{
perror("calloc error");
exit(1);
}
b = calloc(M * N, sizeof(int)); //分配空间
if(NULL == b) //NULL写在前面,这样编译器会提示NULL = b这样的错误
{
perror("calloc error");
exit(1);
}
for(i = 0; i < M; i++) //初始化二维数组
{
for(j = 0; j < N; j++)
{
b[i][j] = j; //*((*(b+i))+j) = j;
}
for(j = 0; j < N; j++)
{
b[i][j] = j; //*((*(b+i))+j) = j;
}
}
return b;
}
return b;
}