2016-07-28 4 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 = ptr + 1; 
*ptr = *ptr + delta_force; 
+0

고마워, –

+1

주의 :''(* ptr)''은''ptr''을 다른 "동등한"코드로 한번 더 평가합니다. 'ptr'은 OP의'real * ptr; '과 달리 단순한 객체/포인터보다 더 복잡한 것이어야합니다. – chux

+0

다시 한 번 감사드립니다. 실제로 ptr은 * (ptr)이 x- 구성 요소에 해당하도록 * (++ ptr)이 y- 구성 요소 등으로 증가하도록 요소를 액세스하는 Force-Vector를 가리 킵니다. –

1

*(++ptr) += delta_force; 

수단 *

그래서 먼저 하나의 값으로 증가 주소의 값을 가져 오기 위해 포인터를 역 참조합니다. 요약

는 : 당신은

+0

글쎄, '* (ptr ++) + = delta_force'도 다음 포인터로 이동하지만'* (++ ptr) + = delta_force'와 같은 일을하지 않습니다. 이 질문에서, 당신은 라인에있는 다른 작업을하기 전에 다음 포인터로 간다. 이 주석의 처음 부분에서 내가 한 줄에서는 다른 작업을 수행 한 후 다음 포인터로 이동합니다. – HolyDanna

+0

당신 말이 맞아요. 나는 내가 말한 것이 더 분명 할 수 있도록 편집했다. – mk2

+0

, 고마워. –

2

는 안에서부터 밖으로을 읽고 다음 포인터에 갈 수 있습니다. *(++ptr) += somevalue 다음 코드 C 프로그래밍 언어 포인터에

++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

.... (*)와 동일한 여기

및 포인터 PTR "의 ADRESS에 값 '수단 FORCE 매크로의 ADRESS 정도 포함 먼저 주소가 증가 할 것이고 ptr의 주소 값은 루프의 각 반복 동안 새로운 값으로 업데이트 될 것입니다 ...

+0

고마워. –

관련 문제