fun函数意思是将一个数组中为0的项删除。该代码输出新数组的各元素,同时输出元素个数

#include
int fun(int ,int);
int main()
{
int n,i,p,s,a[100];
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
p=fun(a,n);
printf("%d\n",p);
for(i=0;i<p;i++)
printf("%d ",a[i]);
return 0;
}
int fun(int *a,int s)
{
while(
(a+s-1)==0) s--;
int i,j,t=s;
for(i=0;i<s-1;i++)
if(*(a+i)==0)
{
for(j=i;j<s-1;j++)
(a+j)=(a+j+1);
t--;
i--;
}
*(a+t-1)='\0';
return t;

}

若将
p=fun(a,n);
printf("%d\n",p);
for(i=0;i<p;i++)
原本输入

5
1 1 0 0 1
输出
3
1 1 1
改为
printf("%d\n",fun(a,n));
for(i=0;i<fun(a,n);i++)后
输入
5
1 1 0 0 1
输出
3
1 1 1 1 1
这到底是为什么啊??求大神解释 拜托了

 int fun(int *a,int s)
{
    int i = 0,j = 0;
    int *pArr = a;
    while(s --)
    {
        if (*pArr != 0)
        {
            a[i ++] = *pArr; 
        }
        *pArr ++;
    }
    a[i] = '\0';
    return i;
}

int main()
{
    int n,i,p,s,a[100] = {0};
    scanf("%d",&n);
    for(i=0;i<n;i++)
        scanf("%d",&a[i]);
    p = fun(a,n);
    printf("%d\n",p);
    for(i=0;i<p;i++)
        printf("%d ",a[i]);
    return 0;
}