2016-07-28 95 views
-5

我对C很陌生,有时会遇到奇怪的符号,尤其是与指针有关的。*(++ ptr)是什么类型的运算符?

一个很简单的例子:

.... 
real *ptr; 
real delta_force; 
for(i<particles;...) 
{ 
    ...some calculations 
    ptr=&FORCE(i,...); //FORCE is a macro returning the current force on a particle 
    *(++ptr) += delta_force; 
    ... 
} 
... 

我如何解释*(++ptr)

+2

它与'++ ptr; * PTR;'。递增然后解除引用。 – Cornstalks

+2

你知道'++ ptr'是什么吗?而一元'*'是什么?现在结合起来。 –

+0

你有没有听说过[指针解引用](http://stackoverflow.com/questions/4955198/what-does-dereferencing-a-pointer-mean)。 – LPs

回答

8

第一个增量指针,然后将delta_force添加到指针指向的值。

*(++ptr) += delta_force; 

装置相同

ptr = ptr + 1; 
*ptr = *ptr + delta_force; 
+0

明白了,非常感谢 –

+1

注意:''ptr'用'*(++ ptr)'评估一次,而不用其他“等效”代码。如果'ptr'是一个更简单的对象/指针,这与OP的'real * ptr;'不同,可能会有所不同。 – chux

+0

再次感谢。实际上ptr指向一个Force-Vector,其中组件是通过增量访问的,所以*(ptr)对应于x组件,而*(++ ptr)是y组件,等等...... –

1

这是增量运算++和指针引用符号的组合*

所以首先你被一个的值增加的地址,然后你解除引用你的指针来获得它的价值。

总结:你要下一个指针

+0

好吧, '*(ptr ++)+ = delta_force'也会转到下一个指针,但不会执行与*(++ ptr)+ = delta_force'相同的操作。在这个问题的cas中,在执行线上的其他操作之前,您转到下一个指针。在本评论开始时我给出的那个,在做了其他操作之后,你会转到下一个指针。 – HolyDanna

+0

你说得对。我编辑过,所以我会说得更清楚。 – mk2

+0

明白了,非常感谢 –

2

从里面出来阅读。 *(++ptr) += somevalue等于下面的代码

++ptr; //increases the Pointer by the sizeof(real) 
real v = *ptr; // dereferences the Pointer and assigns the value it is pointing to to v 
v = v + somevalue; // increases v by somevalue 
*ptr = v; // assigns the new value of v to the target of ptr 
+0

明白了,非常感谢 –

1

在C编程语言指针....(*)的意思是“价值在ADRESS”

这里指针PTR包含强制宏ADRESS所以首先地址将递增,然后在每次迭代循环期间ptr的地址值将被更新为新值...

+0

明白了,非常感谢 –