这是我的代码
#include <stdio.h>
int main(void)
{
int i, myarr[] = {15,3,27};
int *ptr=&myarr[1];
printf("%d\n",*ptr++);
printf("%d\n",++*ptr);
ptr=myarr;
for(i=0;i<3;i++)
printf("%d", *(ptr+i));
return 0;
}
在使用指针后递增的部分中,为什么不打印出4,而是打印28?
输出
3
28
15328
[printf("%d\n",*ptr++);
指向3
,读取3,递增指针并返回要打印的3。
[ptr
现在指向27
printf("%d\n",++*ptr);
指向27
,将数组中的27增加到28,返回要打印的28。 ptr
不变。
在*ptr++
中,++
优先于*
,因此表达式为*(ptr++)
。它取ptr
的值,分别递增ptr
,并使用递增*
之前的值。因为在增量之前,ptr
指向3
,所以*ptr++
的值为3。增量使ptr
指向27
。
在++*ptr
中,必须首先应用*
,因此表达式为++(*ptr)
。然后*ptr
是ptr
指向的东西,即27
,++
将其递增,并在递增后产生值。因此,27
更改为28,表达式的值为28。