C语言指针数组赋值问题

//int main()
//{
// charp[5];
// int i;
// for(i=0;i<5;i++)
// {
// p[i]=(char
)malloc(sizeof(char)*20);
// scanf("%s",p++);
//
// }
// for(i=0;i<5;i++)
// {
// printf("%s",p[i]);
// }
// }
救助为什么在输入函数中把p++改成〔p+i〕就对了一开始p++为什么不可以

p++会改变p的地址,但 p+i不会改变p的地址啊 。p一旦改变,就找不到分配空间的首地址了啊

不应该是char p[5];吧,而应该是*p[5]。