请高手们帮忙看看这个程序,可否详细给点解析

来源:百度知道 编辑:UC知道 时间:2024/05/14 03:48:44
后面的(*p)++与前面的是如何引起差异的,谢谢了

#include<stdio.h>
void main()
{
char a[]="abc";
char *p;
int i;
p=a;
for(i=0;i<3;++i)
printf("%c\n",*p++);
printf("a=%s\n",a);
p=a;
for(i=0;i<3;++i)
printf("%c\n",(*p)++);
printf("a=%s\n",a);
}

++的优先级高于*(指针内容运算符) 故*p++是将p所指向的地址加1;
这样for(i=0;i<3;++i)
printf("%c\n",*p++);
实际上就是把a中元素打印出来(加换行)。
由于括号的存在,(*p)++将p所指向的内容加1。故
for(i=0;i<3;++i)
printf("%c\n",*p++);
是将a[0]中内容先打印再自增,连续进行3次。这样a[0]中最终内容为d
故而a中内容最终为dbc