inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문

포인터 연산

포인터계산

234

kimseunghwan7777

작성한 질문수 23

0

#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이라는 수가 나왔는데, 이 이유를 잘 모르겠습니다.

C++

답변 2

0

Rookiss

https://studymake.tistory.com/201


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

0

Rookiss

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

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

의미가 아주 다릅니다.

0

kimseunghwan7777

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

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

visualstudio에서 파일분할관리실습시 설정 문의를 드립니다.

0

561

1

정렬함수 좀 더 확실하게 이해 할 방법이 있을까요?

0

456

1

strcpy() 구현 관련 질문

0

543

1

빌드(망치)를 누르니 이런 오류가 떴습니다. 어떻게 해야 하나요?

0

477

1

클래스 타입의 포인터 질문합니다

0

560

1

입력값을 enum 값에 넣어주는거 이제 막혔나요?

0

505

1

템플릿 특수화 관련 질문

0

393

1

포인터 관련 질문합니다!

0

276

1

Unable to start assembler. Check your settings.

0

851

2

cpu선택

0

552

1

포인터 질문이 있습니다

0

335

1

20:35 에서 구조체 크기에 대한 질문입니다!

0

592

1

iterator 삭제관련

0

419

1

함수 호출을 디스어셈블러로 분석하다가 궁금점이 생겼습니다!

0

316

1

15 분 45초 대 질문

0

319

0

스택 프레임 질문합니다!

2

316

1

오른값 참조 in 게임

0

394

0

동적할당 질문이 있습니다

0

460

1

안녕하세요 메모리에 대해 질문드립니다.

0

314

1

함수객체 의 매개변수

0

370

1

복사생성자

0

441

1

main이나 endl 부분이 주황색으로 표시된건 어떻게 하나요

0

431

1

포인터 실습 강의를 보고 궁금한게 있습니다.

0

360

1

스택 오버플로우

2

804

1