1 #include<stdio.h> 2 #include<stdlib.h> 3 4 //函数声明 5 int CompactIntegers(int *p,int n); 6 7 int main() 8 { 9 int i; 10 int n,n_final; //n:用于记录要输入的整数个数;n_final:用于记录删除数组中的0元素后数组的长度 11 int *p; //用于指向动态分配的数组空间 12 13 scanf("%d",&n);//输入要输入的整数的个数 14 15 p=calloc(n,sizeof(int)); //动态分配 n 个长度为sizeof(int)连续空间——动态数组(数组元素的个数为 n,类型为int) 16 17 for(i=0;i<n;i++) //输入 n 个整数 18 scanf("%d",p+i); 19 20 n_final=CompactIntegers(p,n); //调用函数 CompactIntegers ,删除数组中所有值为0的元素,其后元素向数组首端移动 21 22 printf("%d\n",n_final); //输出删除数组中的0元素后数组的长度 23 24 for(i=0;i<n_final;i++) //输出删除数组中的0元素后的数组元素 25 printf("%d ",*(p+i)); 26 27 return 0; 28 } 29 30 //删除数组中所有值为0的元素,其后元素向数组首端移动 31 int CompactIntegers(int *p,int n) 32 { 33 int i,j; 34 int n_temp; //用于记录删除 0 元素过程中数组的临时长度 35 36 n_temp=n; //赋数组的临时长度为原始长度 n 37 38 for(i=0;i<n_temp;i++) //遍历数组中的元素 39 { 40 if(*(p+i)==0) //找到 0 元素 41 { 42 for(j=i;j<n_temp;j++) //删除数组中所有值为0的元素,其后元素向数组首端移动 43 *(p+j)=*(p+j+1); 44 i--; 45 n_temp--; //数组的临时长度减 1 46 } 47 } 48 49 return n_temp; 50 }