ko ko ko en en en ko ko cs zh cs ko ko ko ko ko ko en ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko fr ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko fr ko ko ko en en ko en zh en en
COS Pro 2급 C 언어: 31.3 디버거에서 포인터 확인하기
◀ 31.2 역참조 연산자 사용하기31.4 다양한 자료형의 포인터 선언하기 ▶︎
디버거를 사용하면 변수의 메모리 주소, 포인터, 역참조를 손쉽게 확인할 수 있습니다. 다음 내용을 소스 코드 편집 창에 입력하세요.
*numPtr = 20;이 있는 줄에서 F9 키를 눌러 중단점을 설정하고 F5 키를 눌러 디버깅을 시작합니다. 그리고 화면 아래쪽에 지역 탭을 클릭합니다.
▼ 그림 31-10 디버거로 포인터 확인
현재 numPtr = &num1;까지만 실행한 상태이고 포인터 numPtr에 변수 num1의 주소가 저장되어 있습니다. 그림 34-10에서 지역 창을 보면 num1과 numPtr에 저장된 값을 볼 수 있는데 num1은 초깃값으로 10을 할당했으므로 10이 표시되고, numPtr은 num1의 메모리 주소를 할당했으므로 0x0084fe5c가 표시됩니다(메모리 주소는 컴퓨터마다, 실행할 때마다 달라집니다). 이 상태를 그림으로 표현하면 다음과 같은 모양이 됩니다.
▼ 그림 31-11 포인터에 변수의 주소를 저장한 상태
지역 창에서 numPtr의 왼쪽에 있는 ▷을 클릭하면 현재 메모리 주소에 저장된 값이 표시됩니다. 여기서는 numPtr이 num1의 메모리 주소를 저장하고 있으므로 num1의 값 10이 나옵니다.
▼ 그림 31-12 현재 메모리 주소에 저장된 값을 표시
▼ 그림 31-13 메뉴에서 메모리 탭 열기
화면 아래쪽에 메모리 1 탭이 열렸습니다. 이제 소스 코드 편집 창에서 numPtr 위에 마우스 커서를 가져다 놓으면 포인터에 저장된 메모리 주소가 나옵니다. 이 메모리 주소를 선택하고 마우스 오른쪽 버튼을 누른 뒤 복사(C)를 클릭합니다(Ctrl+C 키를 눌러도 됩니다).
▼ 그림 31-14 포인터에 저장된 메모리 주소 복사
메모리 1 창의 주소 부분을 클릭하고 마우스 오른쪽 버튼을 누른 뒤 붙여넣기(P)를 클릭합니다(Ctrl+V 키를 눌러도 됩니다). 그리고 엔터 키를 누르면 해당 메모리 주소의 내용이 표시됩니다.
▼ 그림 31-15 메모리 주소 붙여넣기
이제 메모리 주소 0x0084fe5c의 내용이 보입니다. 0a 00 00 00라고 나오는데 메모리의 내용은 보통 16진수로 표현하므로 0a를 10진수로 변환하면 10입니다. 즉, 이 메모리 공간이 변수 num1의 위치입니다.
▼ 그림 31-16 메모리 창에서 메모리 내용 확인
특히 num1은 int 자료형이므로 4바이트입니다. 따라서 0a 00 00 00과 같이 숫자 4개를 차지합니다. 또한, 우리가 사용하는 x86(x86-64) 계열 CPU는 리틀 엔디언 방식이라 값이 거꾸로 저장됩니다. 그래서 0a 00 00 00은 원래 00 00 00 0a이며 0a 값을 갖는다는 뜻입니다. 리
메모리의 내용을 확인했으면 F10 키를 눌러 *numPtr = 20;이 있는 줄을 실행합니다.
▼ 그림 31-17 역참조 코드 실행
화면 아래쪽 메모리 1 창을 보면 0a가 14로 바뀌었습니다(코드 실행으로 인해 바뀐 메모리 공간은 빨간색으로 표시됨). 16진수 14는 10진수로 20이므로 역참조 후 20을 할당하는 코드 *numPtr = 20;이 실행되어 메모리의 내용이 바뀐 것을 확인할 수 있습니다.
▼ 그림 31-18 역참조 후 20을 할당하여 메모리의 내용이 바뀜
*numPtr = 20;을 실행한 상태를 그림으로 표현하면 다음과 같은 모양이 됩니다. 즉, 역참조로 메모리 주소 0x0084fe5c에 접근하여 20을 할당(저장)합니다.
▼ 그림 31-19 역참조 후 20을 저장
이번에는 조사식 창에서 변수의 메모리 주소와 포인터의 역참조를 표시해보겠습니다. 화면 아래 쪽의 조사식 1 탭을 클릭합니다. 그리고 이름 부분을 클릭하여 &num1과 *numPtr을 입력합니다.
▼ 그림 31-20 조사식 창에서 변수의 메모리 주소와 포인터의 역참조 확인
&num1은 num1의 메모리 주소 0x0084fe5c가 표시되고, *numPtr은 numPtr을 역참조한 값인 20이 표시됩니다. 특히 조사식 창을 이용하면 소스 코드를 고치지 않아도 변수의 값이나 메모리 주소를 바로 확인할 수 있습니다.
이처럼 디버거를 활용하면 변수의 메모리 주소, 포인터, 역참조를 확인하기가 편리합니다. 메모리에는 우리가 저장한 값들이 들어 있을뿐 어려울 것이 하나도 없습니다. 메모리 창과 조사식 창을 활용하면 포인터를 이해하기도 쉽고 프로그래밍하기도 편리합니다.
참고 | 메모리의 내용을 10진수로 보기
메모리 창은 16진수뿐만 아니라 10진수로도 볼 수 있습니다. 다음과 같이 메모리 창에서 마우스 오른쪽 버튼을 누르면 팝업 메뉴가 나옵니다. 16진수 표시(H)가 기본으로 선택되어 있는데 부호 있는 표시(S), 부호 없는 표시(U)를 클릭하면 메모리의 내용을 10진수로 볼 수 있습니다.
▼ 그림 31-21 메모리 창 팝업 메뉴
여기서는 부호 있는 표시(S)를 클릭했습니다. 메모리 내용에서 *numPtr = 20;으로 저장한 20을 볼 수 있습니다.
▼ 그림 31-22 메모리의 내용을 부호 있는 10진수로 표시
◀ 31.2 역참조 연산자 사용하기31.4 다양한 자료형의 포인터 선언하기 ▶︎
COS Pro 2급 C 언어
Unit 1. 소프트웨어 교육과 C 언어
Unit 2. Visual Studio 설치하기
Unit 3. Hello, world!로 시작하기
Unit 4. 기본 문법 알아보기
Unit 5. 변수 만들기
Unit 6. 디버거 사용하기
Unit 7. 정수 자료형 사용하기
Unit 8. 실수 자료형 사용하기
Unit 9. 문자 자료형 사용하기
Unit 10. 상수 사용하기
Unit 11. 입력 값을 변수에 저장하기
Unit 12. 덧셈, 뺄셈하기
Unit 13. 증가, 감소 연산자 사용하기
Unit 14. 곱셈, 나눗셈하기
Unit 15. 나머지 연산하기
Unit 16. 자료형의 확장과 축소 알아보기
Unit 17. if 조건문으로 특정 조건일 때 코드 실행하기
Unit 18. else를 사용하여 두 방향으로 분기하기
Unit 19. else if를 사용하여 여러 방향으로 분기하기
Unit 20. 비교 연산자와 삼항 연산자 사용하기
Unit 21. 논리 연산자 사용하기
Unit 22. 비트 연산자 사용하기
Unit 23. 불 자료형 사용하기
Unit 24. 연산자 우선순위 알아보기
Unit 25. switch 분기문으로 다양한 조건 처리하기
Unit 26. for 반복문으로 Hello, world! 100번 출력하기
Unit 27. while 반복문으로 Hello, world! 100번 출력하기
Unit 28. do while 반복문으로 최소 한 번은 실행하기
Unit 29. break, continue로 반복문 제어하기
Unit 30. 계단식으로 별 출력하기
Unit 31. 포인터 사용하기
31.1 포인터 변수 선언하기
31.2 역참조 연산자 사용하기
31.3 디버거에서 포인터 확인하기
31.4 다양한 자료형의 포인터 선언하기
31.5 void 포인터 선언하기
31.6 이중 포인터 사용하기
31.7 잘못된 포인터 사용
31.9 연습문제: 포인터와 주소 연산자 사용하기
Unit 32. 메모리 사용하기
Unit 33. 배열 사용하기
Unit 34. 2차원 배열 사용하기
Unit 35. 문자열 사용하기
Unit 36. 입력 값을 문자열에 저장하기
Unit 37. 문자열의 길이를 구하고 비교하기
Unit 38. 문자열을 복사하고 붙이기
Unit 39. 문자열 검색하기
Unit 40. 문자열 자르기
Unit 41. 문자열과 숫자를 서로 변환하기
Unit 42 회문 판별과 N-gram 만들기
Unit 43. 자료형 변환하기
Unit 44. 포인터 연산 사용하기
Unit 45. 함수 사용하기
Unit 46. 함수에서 반환값 사용하기
Unit 47. 함수에서 매개변수 사용하기
Unit 48. 함수에서 포인터 매개변수 사용하기
Unit 49. 함수에서 배열 매개변수 사용하기
Unit 50. 배열 정렬하기
Unit 51. 전역 변수 사용하기
COS Pro 2급 파이썬
- 이 사이트에 실린 모든 내용, 디자인, 이미지, 편집 구성의 저작권은 (주)도서출판 길벗과 지은이에게 있습니다.
- 저작권법에 의해 보호를 받는 저작물이므로 무단 전재와 복제를 금합니다.
- 책의 내용을 복제하여 블로그, 웹사이트 등에 게시할 수 없습니다.
- 링크, SNS 공유는 허용합니다.
서울시 마포구 서교동 월드컵로 10길 56 (서울시 마포구 서교동 467-9)
Copyright © 2016-2021 Coding Dojang