下面是测试代码:
#include <stdio.h> main() { char b [] = "aehlox"; char *p = b; printf("%s\n", p); printf("%s\n", p++); printf("%c\n", *p++); printf("%c\n", (*p)++); printf("%c\n", ++*p++); printf("%s\n", p); printf("%s\n", b); }
大家先想想输出结果
结果是:
aehloxaehlox
e
h
j
lox
aejlox
p:自然指向字符a位置
p++:先返回p(输出aehlox),再加1,即指向下一个字符e的位置
*p++:先返回*p(输出e),再加1,即指向下一个字符f的位置
(*p)++:先返回*p(输出h),再加1,把f位置的值修改成i
++*p++:由于操作符*和++优先级一样,且是向左结合,因此先执行p++,结果是返回p的拷贝(指向i的位置),p向后移动一个位置,接着执行++*p,即给p的指向加1,此时p指向的值为i+1后的值,即j
p:p此时指向l位置,打印输出lox
最后打印数组内容为: