작성
·
204
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이라는 수가 나왔는데, 이 이유를 잘 모르겠습니다.
내용은 이해했습니다. 한가지 궁금증이 더 있습니다.
연산자 우선순위가 *, & , sizeof, (type), !, ~, -, +, -- , ++ 순이라는 것을 보았는데, (*ptr)++ 과 *ptr++ 의 값이 다른 이유를 잘 모르겠습니다. 저 우선순위에 따른다면 *가 먼저 작동해서 그 주소가 가리키는 변수를 읽어온 다음, +1을 해주는 건 동일한 수순으로 진행될텐데, 왜 서로 다른 값이 나오는 건가요??