将你的程序改一下:
#include "stdio.h"
#include "conio.h"
void main()
{
int i;
char str[]={'A','B','C','\0','D','E','F','\0'},*p;
i=sizeof(str);
printf("i=%d\n",i);
getch();
for(p=str;p-str<sizeof(str);p++)
{
printf("(p=%c)",*p);
//p所指的str字符串中字符;
printf("%s\n",p++);
}
}
-------------------------------------------------------
这个跟你有2个p++无关,如果将 printf("%s\n",p++);改为 printf("%s\n",p++);那么输出的结果为:
ABC
BC
C
//此时指针p指的位置为C后的"\0",因此程序认为需要输出的是一个终止符即空的东西(不需要任何输出)
DEF
EF
F
--------------------------------------------------------
对你的程序经行注解:
第一次for循环,指针P指的位置为str的起始位置即A的地址,因为在str中ABC后有‘\0’这个终止符,此时输出%s为ABC
此时指针p加了两个1,因此*p指的位置为str中的C;
第二次for循环,因此此时指针p指的位置为str中的C,而在C之后为‘\0’这个终止符,因此输出为一个字符C;
第三次for循环,此时的指针p指的位置为str中D的位置,所以输出字符串为 DEF
……
就这么简单,后边的东西就不细说了。。