删除数组中的某一元素

以下程序的功能是删除值为x的数组元素。填空完成程序。
#include <stdio.h>
void main()
{
int a[10]={1,3,5,2,2,6,8,10,0,2};
int x,*p,i,count=0;
x=2;
for(p=a;p<a+10-count;p++)
if(*p==x)
{
count++;
for(i=p-a;i<10-count;i++)
_ ;
p--;
}
for(p=a; _ ; p++)
printf("%5d",*p);
printf("\n");
}第一个空应该是删除,第二个是遍历?
没有找到类似的问题解答,
我不理解p<a+10-count,是从后往前开始遍历?那为什么要这样?

第一个空是将后面的元素前移,覆盖要删除的那个元素;
第二个是要遍历的范围;
p<a+10-count是遍历的范围,count是需要删除元素个数


#include <stdio.h>
void main()
{
    int a[10] = { 1,3,5,2,2,6,8,10,0,2 };
    int x, * p, i, count = 0;
    x = 2;
    for (p = a; p < a + 10 - count; p++)
        if (*p == x)
        {
            count++;
            for (i = p - a; i < 10 - count; i++)
                *p=*p+1;
            p--;
        }
    for (p = a; p<a+10-count+1; p++)
        printf("%5d", *p);
    printf("\n");
}

第一空:a[i] = a[i + 1];
第二空: p < a + 10 - count

p<a+10-count是减去了要删除元素个数后要遍历的次数,下面是一个实现,供参考:


#include <stdio.h>
int main()
{
    int a[10]={1,3,5,2,2,6,8,10,0,2};
    int x,*p,i,count=0;
    x=2;
    for(p=a;p<a+10-count;p++)  //a+10是遍历到数组结尾,count代表数组中要删除的元素的个数,所以减去count即是删除元素后遍历数组少了个这个元素 
        if(*p==x)
        {
            count++;
            for(i=p-a;i<10-count;i++) //这个for循环要用于从当前数组元素和言删除的元素相同时,移动后面数组元素到当前位置 
                *(a+i)=*(a+i+1); //移动后面的元素到当前位置 
            p--;
        }
        
    for(p=a; p<a+10-count; p++)  //减去count即去除了要删除元素的个数 
        printf("%5d",*p);
    printf("\n");
    
    return 0; 
}

img