首先你这个问题其实是你没有理解指针的用法而产生的
struct person *creat0()
{
struct person p[13];
int i;
i=0;
while(i<13)
{
n++;
p[i].num=i+1;
i++;
}
return p;
}
这个函数这样返回 p 这样能行吗???这是很大的错误!!!!
你后面出现的死循环就是因为这个大错误产生的。
再来告诉你后面是怎么出错的吧!
struct person *creat1(struct person p[])
{
int i;
for(i=0;i<13;i++)
{
p[i].code=j;
j++;
if(j==3) j=0;
}
return p;
}
这个地方确实是一个死循环,因为当你i = 12的时候,(在我的电脑上面是这样,在你电脑上的可能不是),
&p[12].code == &i
懂这个意思吗?
这样意味当你
p[i].code=j;的时候改变了i的值,所以是个死循环,如果你会调试,你可以使用调试的时候查看地址,如果不会在那个函数里面加上这两句话,调用延时函数,去看看,地址是不是有相等的
printf("the p[i].code \'s address is %x\n",&p[i].code);
printf("the i \'s address is %x\n",&i);