0

以下指针表达式有什么区别

*ptr++

++*ptr

(*ptr)++
4

2 回答 2

3

第一个,*ptr++;,递增指针并计算指针在递增之前指向的值。

第二个,++*ptr;取消引用指针并增加指向的值,它的值是增加的值。

第三个,(*ptr)++,取消引用指针并递增指向的值,它的值是递增之前的指向值。

考虑例如int arr[4] = { 1, 2, 3, 4 };ptr = &arr[1];

  • 之后int val = *ptr++;,指针ptr指向arr[2]并且val为 2。
  • 之后int val = ++*ptr;,指针ptr仍然指向arr[1]arr[1]递增,所以现在它的值为 3, 也是val
  • 之后int val = (*ptr)++;,指针仍然指向arr[1],arr[1]递增,因此它的值现在是 3,但val具有旧值arr[1]2。
于 2012-06-19T16:17:58.073 回答
1

第一个 will 等价于*(ptr++)which will 返回一个带有当前值的临时指针,然后递增 ptr。

第二个将增加所指向的值ptr(假设它是一个已++定义的类型)并返回增加的值

第三个将返回指向的当前值ptr,然后递增ptr

前任。

int a = 0;
int * ptr = &a;
int b = *ptr++;

a = 0,b = 0,但ptr会指向胡说八道。

int a = 0;
int * ptr = &a;
int b = ++*ptr;

a = 1, b = 1

int a = 0;
int * ptr = &a;
int b = (*ptr)++;

a = 1, b = 0

于 2012-06-19T16:23:13.733 回答