C中的指针表达式

时间:2012-06-19 16:13:45

标签: c

以下指针表达式

之间有什么区别
*ptr++

++*ptr

(*ptr)++

2 个答案:

答案 0 :(得分: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的旧值为{{1} },2。

答案 1 :(得分:1)

第一个将等同于*(ptr++),它将返回一个带有当前值的临时指针,然后递增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