작성
·
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씩 늘어나는게 아니라
포인터 변수의 크기만큼 늘어남을 알 수 있습니다.
첨언해드릴 말이 없습니다.
제가 확인이 늦었는데 친절하고 자세한 답변 너무나 감사드립니다 :)