포인터계산
234
작성한 질문수 23
- - 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- - 먼저 유사한 질문이 있었는지 검색해보세요.
- - 서로 예의를 지키며 존중하는 문화를 만들어가요.
- - 잠깐! 인프런 서비스 운영 관련 문의는 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
*(ptr++);
ptr에 4를 더하고 해당 주소에 타고 감
(*ptr) += 1;
ptr 주소로 이동해서, 안에 있는 값에 1을 더함
의미가 아주 다릅니다.
0
내용은 이해했습니다. 한가지 궁금증이 더 있습니다.
연산자 우선순위가 *, & , 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





