C语言学习者碰到不明白的地方了,求大神指点

C语言学习者遇到不明白的地方了,求大神指点啊
这是我写的一段代码,运行时会出现错码,但不知错在哪?
#include "stdafx.h"


int _tmain(int argc, _TCHAR* argv[])
{
int a[10];
int *p;
for(int i=0;i<10;i++)
{
scanf("%c",&a[i]);
}
p=a;
for(;p<p+10;)
{
printf("%c",*p++);
}
return 0;
}
为什么这么写又可以了呢??
for(p=a;p<(a+10);p++)
{
  printf("%d",*P);
}和
for(p=a;a<(p+10);a++)
{
  printf("%d",*a);
}又是可以的

------解决方案--------------------
p<p+10恒成立
不能作为循环条件,否则死循环
p++之后 不等式两边的p都增加了,不是只加一边。