首先,你不知道这个数组可能包含了几个子数组,所以你无法事先申请合适数目的数组来保存数据。
所以必须先动态的申请一段内存,然后挨个扫描现有的数组中的元素,如果不是0,就将它插入到动态数组中去。如果是0的话,再动态的申请一段内存(也就是动态数组),然后再继续扫描,如此往复,直到扫描结束。
你还可以用一个数组将你所申请的内存指针保存起来,并对申请次数计数,这样就可以继续对这些数组进行处理了。
将原数组按要求分解成一些“子数组”,保存到二维数组a中。
#include
#include
int main(void)
{
int sd[]={4,5,6,7,2,0,65,8,5,3,0,8,5,6,4,1,0,0,78,25,9,-1}
int **a,i,j=0,k=0,l=0;
a=malloc(sizeof(int *));
a[0]=malloc(sizeof(int));
for (i=0;sd[i]!=-1;++i)
if (sd[i]) {
a[k][j++]=sd[i];
a[k]=realloc(a[k],sizeof(int)*(j+1));
}
else {
++k;
j=0;
a=realloc(a,sizeof(int *)*(k+1));
a[k]=malloc(sizeof(int));
}
for (i=0;i
putchar('\n');
}
return 0;
}
不懂什么意思?说清楚点