좋아, 모두 매개 변수의 바인딩을 설명했다.
그러나 아무도 그것이 의미하는 바를 언급하지 않았습니다.
int date[1,2,3,4,5];
int* pointer = data;
std::cout << *pointer++ << std::endl;
std::cout << *pointer << std::endl;
위에서 언급 한 바와 같이 ++ 연산자는 우선 순위가 높으므로 * 연산자보다 엄격하게 바인딩됩니다. 표현식도 동일합니다 :
std::cout << *(pointer++) << std::endl;
std::cout << *pointer << std::endl;
연산자 ++는 후위 버전입니다. 즉, 포인터가 증가하지만 연산 결과는 * 연산자에서 사용할 원래 값을 반환합니다. 따라서 다음과 같이 명령문을 수정할 수 있습니다.
std::cout << *pointer << std::endl;
pointer++;
std::cout << *pointer << std::endl;
출력 결과는 현재 가리키는 정수이지만 포인터도 증가합니다. 따라서 인쇄 된 값은 1\n2\n
이 아니고 2\n\3\n
이 아닙니다.
FAQ 여야합니까? –
@the_drow : 나는 그렇게 생각하지 않는다. 잘 쓰여진 코드는 여기에 괄호를 사용하여 컴파일러와 다른 프로그래머 모두에게 명확한 의도를 전달합니다. –
이 문제는 이미 comp.lang.c FAQ에 있습니다. 내 대답에 대한 링크를 참조하십시오. – NPE