*(++ptr) 是个什么样的运算符?

What kind of operator is *(++ptr)?

我是 C 的新手,有时我会遇到奇怪的符号,尤其是与指针相关的符号。

一个非常简短的例子:

....
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)

先增加指针,然后将delta_force添加到指针指向的值。

*(++ptr) += delta_force;

的含义相同
ptr = ptr + 1;
*ptr = *ptr + delta_force;

这是递增运算符++和指针解引用符号*

的组合

因此,首先您将地址的值增加 1,然后取消引用您的指针以获取其值。

总结:您将前往下一个指针

从内到外阅读。 *(++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

in c 编程语言中的指针....(*) 表示 'value at adress of'

此处指针 ptr 包含 FORCE 宏的地址,因此首先地址将递增然后 ptr 地址处的值将在每次循环迭代期间更新为新值...