• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    미해결

포인터계산

22.08.13 00:40 작성 조회수 131

0

  • - 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
  • - 먼저 유사한 질문이 있었는지 검색해보세요.
  • - 서로 예의를 지키며 존중하는 문화를 만들어가요.
  • - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.

#include <iostream>
using namespace std;

int main(void)
{
    int number = 1;
    int* ptr = &number;
    cout << &ptr << endl;
    cout << ptr << endl;
    cout << *ptr << endl;
    //*ptr += 1;
    //*ptr++;
    cout << *ptr << endl;

}/* 

    *ptr++;
008D19AB  mov         eax,dword ptr [ptr]
008D19AE  add         eax,4
008D19B1  mov         dword ptr [ptr],eax 

  *ptr += 1;
006419AB  mov         eax,dword ptr [ptr]  
006419AE  mov         ecx,dword ptr [eax]  
006419B0  add         ecx,1  
006419B3  mov         edx,dword ptr [ptr]  
006419B6  mov         dword ptr [edx],ecx

*/

궁금증이 생겨 여러 실험하면서, 어셈블리를 구경해봤습니다. ++, +=1 은 동일하게 1을 더할 때 사용한다고 배웠는데, 위와 같은 차이가 발생한 이유는 무엇인지 궁금합니다.

(강의서 설명해주신 것처럼 1증가니까, 바구니 크기만큼 해서 4가 증가한 것으로는 이미 이해를 했습니다. )

(연산자 우선순위 상 문제가 있을 수도 있을 것으로 생각하여, 찾아봤습니다. *가 1순위, ++은 그 다음, +=은 제일 마지막이었습니다. 어떠한 경우든 *가 선이기 때문에 ++, += 의 영향은 없을 것이로 판단하였습니다. 이 생각에 오류가 있는지 궁금합니다.) 

2. 저것의 결과는 *ptr++의 경우, -858993460이라는 수가 나왔는데, 이 이유를 잘 모르겠습니다.

답변 2

·

답변을 작성해보세요.

0

https://studymake.tistory.com/201


사람들이 우선순위를 외우고 있진 않기 때문에
그냥 헷갈리지 않게 괄호를 이용하시기 바랍니다.

0

*(ptr++);
ptr에 4를 더하고 해당 주소에 타고 감

(*ptr) += 1;
ptr 주소로 이동해서, 안에 있는 값에 1을 더함

의미가 아주 다릅니다.

내용은 이해했습니다. 한가지 궁금증이 더 있습니다.

연산자 우선순위가 *, & , sizeof, (type), !, ~, -, +, -- , ++ 순이라는 것을 보았는데, (*ptr)++ 과 *ptr++ 의 값이 다른 이유를 잘 모르겠습니다. 저 우선순위에 따른다면 *가 먼저 작동해서 그 주소가 가리키는 변수를 읽어온 다음, +1을 해주는 건 동일한 수순으로 진행될텐데, 왜 서로 다른 값이 나오는 건가요??