2011-11-01 70 views

回答

6
  1. (*x)++ - 增量由x指向的值(后置,返回原始值)

  2. *(x++) - 增量x(后增量)解除引用的原始指针)。

  3. ++(*x) - 与#1相同,但返回递增的值。

  4. *(++x) - 与#2相同,但取消引用生成的指针。

另外,#2和#4的变化的指针(指针算术)的值,而#1和#3 - 改变由x指向的值(即:不管-X-点-在算术) 。

+0

1和3不等价。 1产生'* x'的当前值,并且作为副作用增加它。 3的不同之处在于它产生增加的'* x'值,而不是原始值。 –

+0

@凯斯,你说的对,澄清 – littleadv

+0

你需要修正编号。 –

0

一切,包括增加或减少一个指针的值(而不是什么它指向的值)被认为是指针运算。因此,2和4是指针算术的例子,而1和3则不是。

例如,(*x)++装置以第一值找到x点,然后通过递增1该值,而*(x++)意味着递增x本身(即,使它指向所述元件的什么立即右最初指向),然后找到x最初指出的元素的值。

5
1. (*x)++ 

x指向的值正在后递增。这将在增量操作之前产生指向值。

2. *(x++) 

指针x被解除引用和递增后。这会返回递增操作之前x指向的值。

3. ++(*x) 

x指向的值正在预先递增。这将在增量操作之后产生指向值。

4. *(++x) 

指针x在预递增后被解除引用。这将产生紧接在x指向的位置之后的位置的值。

由于2 & 4改变了x本身的值,它们被认为是指针算术的例子。 1 & 3修改x指向的对象,但不修改指针本身;所以这些不被认为是指针算术。

1
  1. (*x)++递增值由x指出,并返回其值。
  2. *(x++)变化x指向下一个内存地址(确切位置是由什么x被宣布为是指向大小确定),并返回存储在地址的值。
  3. ++(*x)增加x指向的值并返回其新的值。
  4. *(++x)x移动到下一个地址(参见2),并返回存储在新的地址处的值。