指针的后增量如何工作?

问题描述 投票:1回答:2

这是我的代码

#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
c pointers post-increment
2个回答
3
投票

[printf("%d\n",*ptr++);指向3,读取3,递增指针并返回要打印的3。

[ptr现在指向27

printf("%d\n",++*ptr);指向27,将数组中的27增加到28,返回要打印的28。 ptr不变。


0
投票

*ptr++中,++优先于*,因此表达式为*(ptr++)。它取ptr的值,分别递增ptr,并使用递增*之前的值。因为在增量之前,ptr指向3,所以*ptr++的值为3。增量使ptr指向27

++*ptr中,必须首先应用*,因此表达式为++(*ptr)。然后*ptrptr指向的东西,即27++将其递增,并在递增后产生值。因此,27更改为28,表达式的值为28。

© www.soinside.com 2019 - 2024. All rights reserved.