2016-07-28 196 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

明白了,非常感謝 –