不明白为什么出错,大家帮忙看一下解决方案

不明白为什么出错,大家帮忙看一下
include   <stdio.h>
int   cho(int   array[30]);
main()
{
int   array[30];
int   *p=array;
int   k,b;
printf( "Please   enter   the   numbers:\n ");
scanf( "%d ",&array[0]);
for(k=0;array[k]   !=   0&&k <29;k++)

scanf( "%d ",&array[k+1]);
p=cho(array[30]);

printf( "It   is   :\n ");
for(b=0;*(p+k)!=0;b++)
printf( "%d ",*(p+k));

}

int   cho(int   array[30])
{
int   a,b;
for(a=0;a <30;a++)
{
if(array[a]!=2)
{
if(array[a]%2=0||array[a]%3=0||array[5]=0)
array[a]=0;
}
}
for(a=0;a <30;a++)
{
for(b=0;b <30-a;b++)
{
if(array[a+b-1]=0)
{
array[a+b-1]=array[a+b];
array[a+b]=0;
}
}
}
return(&array[0]);
}

------解决方案--------------------
#include <stdio.h>

p=cho(array);
------解决方案--------------------
p=cho(array);
if(array[a]%2==0||array[a]%3==0||array[5]==0)
------解决方案--------------------
for(a=0;a <30;a++)
{
for(b=0;b <30-a;b++)
{
if(array[a+b-1]==0)
{
array[a+b-1]=array[a+b];
array[a+b]=0;
}
}
}这语句中当a=0,b=0时array[a+b-1]不正确。
for(b=0;*(p+k)!=0;b++)printf( "%d ",*(p+k));k在执行语句for(k=0;array[k] != 0&&k <29;k++)时已经值为29。在这for语句中*(p+k)!=0[*(p+29)!=0)]如果没有成立那就成了死循环