这些语法的含义(指针算术?)

时间:2011-11-01 23:08:47

标签: c pointers

我想知道这4个符号是什么意思。我是C语言中的新手,我不确定这是否被认为是指针算术?

1. (*x)++ 
2. *(x++) 
3. ++(*x)
4. *(++x)

由于

4 个答案:

答案 0 :(得分:6)

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

  2. *(x++) - 增量x(后增量)取消引用原始指针。

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

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

  5. 此外,#2和#4更改指针(指针算术)的值,而#1和#3 - 更改x指向的值(即:在算术中不管-x-点)

答案 1 :(得分:5)

1. (*x)++ 

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

2. *(x++) 

指针x被取消引用并且后递增。这将返回递增操作之前x指向的值。

3. ++(*x)

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

4. *(++x)

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

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

答案 2 :(得分:1)

  1. (*x)++增加x指向的值并返回其值。
  2. *(x++)x更改为指向下一个内存地址(确切地说,这是由x声明指向的大小决定的)并返回存储的值在地址。
  3. ++(*x)增加x指向的值并返回其值。
  4. *(++x)x移至下一个地址(请参阅2),并返回地址中存储的值。

答案 3 :(得分:0)

涉及增加或减少指针值的所有内容(与其指向的值相反)都被视为指针算术。因此,2和4是指针算术的例子,而1和3不是。

例如,(*x)++表示首先找到x指向的值,然后将该值增加1,而*(x++)表示增加x本身(是,让它指向它最初指向的直接右边的元素),然后找到x最初指向的元素的值。