-
카테고리
-
세부 분야
게임 프로그래밍
-
해결 여부
미해결
포인터계산
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이라는 수가 나왔는데, 이 이유를 잘 모르겠습니다.
답변을 작성해보세요.
0
Rookiss
지식공유자2022.08.13
https://studymake.tistory.com/201
사람들이 우선순위를 외우고 있진 않기 때문에
그냥 헷갈리지 않게 괄호를 이용하시기 바랍니다.
0
Rookiss
지식공유자2022.08.13
*(ptr++);
ptr에 4를 더하고 해당 주소에 타고 감
(*ptr) += 1;
ptr 주소로 이동해서, 안에 있는 값에 1을 더함
의미가 아주 다릅니다.
kimseunghwan7777
질문자2022.08.13
내용은 이해했습니다. 한가지 궁금증이 더 있습니다.
연산자 우선순위가 *, & , sizeof, (type), !, ~, -, +, -- , ++ 순이라는 것을 보았는데, (*ptr)++ 과 *ptr++ 의 값이 다른 이유를 잘 모르겠습니다. 저 우선순위에 따른다면 *가 먼저 작동해서 그 주소가 가리키는 변수를 읽어온 다음, +1을 해주는 건 동일한 수순으로 진행될텐데, 왜 서로 다른 값이 나오는 건가요??
답변 2