2016-06-24 4 views
-2

우리는 다음과 같은 기능을 가지고 있다고 가정 해 봅시다.C++ difference between - k [i] and k [i] -

void f(int *k){ 
    k++; //increments the pointer to the second element 
    (--(*k)); //what exactly does is mean? 

} 
int main(){ 
    v[]={1,2,3}; 
    f(v); //passes the pointer to the forst elemento of v 
} 

어떤 순서로 진행됩니까? void f(int k[3])과 같은 함수에 --k[1]이 있으면 어떻게됩니까? 그것의 첫 번째 요소 -

+1

C++ 운영자 우선 순위 : http://en.cppreference.com/w/cpp/language/operator_precedence –

+0

downvoters가 설명 할 수있는 경우 .. – Benoit

+0

[C, C++, Java, C#] (http://stackoverflow.com/questions/6457130/pre-post-increment-operator-behavior-in-cc-java-c-sharp) – flaviodesousa

답변

0

최고의 아이디어는 디버거를 열고 단계 :

당신이 배열에 대한 포인터를 전달 기능 f(v) 호출에 의해 단계를 확인하는 것입니다.

f(v) 안에 먼저 포인터를 1 씩 증가시킵니다 (k++). 여기서 주목해야 할 것은 어떤 유형의 객체를 전달하든 상관 없으며 항상 다른 객체로 이동되므로 객체의 크기는 중요하지 않습니다.

이제 (--(*k)) - 내부는 *k의 내용을 줄입니다 (이제는 array - so 2의 두 번째 요소를 가리킴).

결론적으로, 함수 v를 끝내면 v == {1, 1, 3};

1

C++은 차이 --k [I] 및 K [I] -

전 사전 감소한다. 후기는 사후 감소를합니다.

(--(*k)); //what exactly does is mean? 

operator*

는 참조 연산자이다.

어떤 순서로 진행됩니까?

모든 표현식은 operator precedence 규칙을 따릅니다. 괄호 안의 그룹은 모든 연산자보다 바인딩이 엄격합니다.

관련 문제