int *a[2];
int n;/*n紧跟a定义*/
scanf("%d",&n);
a[2]=(int *)calloc(n,sizeof(int)); /*a[2] 数组越界啦,越界之后,就覆盖了n的值了*/
a[0]=(int *)calloc(n,sizeof(int));
a[1]=(int *)calloc(n,sizeof(int));
-----------------
我的意思是你定义了int a[2];
你只能访问a[0]和a[1],a[2]就是下标越界了
int (*a)[2];/*数组指针*/
int n;
scanf("%d",&n);
a=(int (*)[2])malloc(2,sizeof(int));
应该这样:
char **a;
int x;
scanf("%d",&x);
a=malloc(sizeof(char *)*x);
a[0]=malloc(sizeof(char)*20);
scanf("%s",a[0]);
puts(a[0]);
a[x-1]=malloc(sizeof(char)*30);
scanf("%s",a[x-1]);
puts(a[x-1]);