인프런 커뮤니티 질문&답변

전성철님의 프로필 이미지
전성철

작성한 질문수

[하루 10분|C++] 누구나 쉽게 배우는 C++ 프로그래밍 입문

포인터와 메모리 해제 (2)

p3[1] 을 출력 할 때 왜 실제값이 나오나요?

작성

·

222

1

안녕하세요 판다코딩님, 강의 정말 잘 듣고 있습니다.

왜 p3[1]을 출력할 때 주소값이 아닌 실제값이 출력이 되는건가요??

포인터에서 주소값이 아닌 실제값을 출력할때는 앞에 * 이 있어야 한다고 배웠는데 여기선 *가 없어도 실제값이 출력이 되는 이유가 궁금합니다!

좋은 강의 만들어주셔서 감사합니다!

답변 2

5

안녕하세요!

강의에서 p3 이라는 포인터 변수에 new 연산자를 이용하여

메모리를 동적할당 하였습니다. 배열과 동일하게 메모리 공간에 연속적으로

할당되고 , 따라서 [ ] 를 이용하여 배열처럼 인덱스로 접근할 수 있습니다.

int a[10]; 이라고 배열을 선언한 경우에도, 배열의 이름 a는 포인터입니다.

*를 사용하여  *a, *(a+1) , ...  과 같이 접근할 수 있습니다.

이때 괄호에 주의하셔야 합니다.

*a + 1은 a가 가리키는 값을 가져와서 1을 더하는 것이고,

*(a+1)은 a의 주소값에 a 포인터 변수의 크기(=주소공간 한 칸)만큼 더한 다음

값에 접근한다는 의미이기 때문에 다음과 같이 사용할 수 있습니다.

*a  ==  *(a+0)  ==  a[0]

*(a+1)  ==  a[1] 

a와 a+1을 확인해보시면, 1씩 늘어나는게 아니라

포인터 변수의 크기만큼 늘어남을 알 수 있습니다.

판다코딩님의 프로필 이미지
판다코딩
지식공유자

첨언해드릴 말이 없습니다.

제가 확인이 늦었는데 친절하고 자세한 답변 너무나 감사드립니다 :)

2

전성철님의 프로필 이미지
전성철
질문자

감사합니다!

도움이 되셨다면 다행입니다!

전성철님의 프로필 이미지
전성철

작성한 질문수

질문하기