ptr1와 &ptr1의 차이점
안녕하세요~ 강의 1분40초 쯤에
printf("%p %d %p\n", ptr1, *ptr1, &ptr1);
코드를 출력하면 값이
002AFAEC 100 002AFAE0
이렇게 나옵니다.
ptr1이랑 &ptr1이랑 arr[0]의 주소를 출력하는 걸로 알고 있는데 다르게 나오는 걸로 보니 제가 잘못 알고 있는 거 같습니다ㅠ ptr1이랑 &ptr1을 출력하면 값이 다르게 나오는데 이 둘의 차이는 무엇일까요? 헷갈리네요
아래에 코드도 첨부해 놓았습니다.
int main()
{
int arr[5] = { 100, 200, 300, 400, 500 };
int* ptr1, * ptr2, * ptr3;
ptr1 = arr;
printf("%p %d %p\n", ptr1, *ptr1, &ptr1); // 002AFAEC 100 002AFAE0
}
답변 1
3
안녕하세요, 답변 도우미 Soobak 입니다.
먼저, 질문자님께서 제가 답변 드리기 수월하게끔 배려해주신 부분들이 너무 잘 느껴져서 인상깊네요. 굉장히 감사드립니다. 🥲
질문에 대한 답변은 다음과 같습니다.
ptr1은 포인터 자료형의 변수로서, 다른 변수의 주소값을 저장합니다.위 코드의 경우에서
ptr1에 저장된 주소값은arr배열의 첫 번째 원소의 주소값 이겠지요!
&ptr1는ptr1변수의 주소를 나타냅니다.ptr1역시 자료형이 포인터 타입인 변수 로서, 자기 자신만의 주소값을 갖습니다.
즉,
printf("%p %d %p\n", ptr1, *ptr1, &ptr1);에서,ptr1의 출력 결과는ptr1변수가 저장하고 있는 다른 변수의 주소값 이며,&ptr1의 출력 결과는ptr1변수 자기 자신의 주소값 입니다.
이렇게 '포인터 변수 자체의 주소' 와 '포인터 변수에 저장된 주소' 에 대한 내용은
강의 9.12 포인터의 작동원리 의 7:08 부분에서 교수님께서 그림을 곁들이셔서 자세히 설명해주시니,
한 번 해당 부분만 다시 참고해보시면 좋을 것 같습니다!
포인터에 대한 개념은 처음에 정말 헷갈리는 것 같아요. 저 또한 처음에 혼란스러웠던 경험이 있습니다.
하지만, 강의를 꾸준히 수강하시면서 학습하시다 보면, 어느 순간 자연스럽게 익숙해지시게 될 거에요! 😀
질문자님께서 제가 답변 드리는 것에 대해 배려를 해주신 만큼,
저도 더욱 질문자님의 학습에 도움이 되고자 고민을 해보았고, 아래 코드를 첨부해 보았습니다.
#include <stdio.h>
int main()
{
int arr1[5] = { 100, 200, 300, 400, 500 };
int arr2[5] = { 600, 700, 800, 900, 1000};
int* ptr1;
ptr1 = arr1; // ptr1 에 arr1 대입.
printf ("ptr1 변수에 arr1 를 대입하였습니다.\n");
printf("ptr1 에 저장된 주소값은 현재 [ %p ] 입니다.\n", ptr1);
printf("arr1 의 주소값은 현재 [ %p ] 입니다.\n", arr1);
printf("ptr1 포인터 변수의 주소값은 현재 [ %p ] 입니다.\n", &ptr1);
ptr1 = arr2; // 이번에는 ptr1 에 arr2 대입.
printf ("\nptr1 변수에 arr2 를 대입하였습니다.\n");
printf("ptr1 에 저장된 주소값은 현재 [ %p ] 입니다.\n", ptr1);
printf("arr2 의 주소값은 현재 [ %p ] 입니다.\n", arr2);
printf("ptr1 포인터 변수의 주소값은 현재 [ %p ] 입니다.\n", &ptr1);
printf("\n위 두 가지 경우에서, ptr1 포인터 변수의 주소값은 [ %p ] 로 동일합니다.\n", &ptr1);
return 0;
}출력 결과 예시

해당 코드를 복사하셔서, 여러가지 경우들에 대해 직접 대입해보시면서 결과를 확인해보시면 포인터에 대한 개념을 이해하시는 데에 조금 더 도움이 되실 것 같아요!
도움이 되셨길 바라며, 또 궁금하신 점 있으시다면 편하게 댓글 남겨주세요! 감사합니다. 화이팅!! 😀
Export template 안됨
1
45
2
완전히 똑같이 따라해도 exe파일이 안만들어져서 실행이 안됩니다.
1
70
3
main 함수에서 왜 int만 선언이 되는걸까요
1
63
2
8비트 2진수 변환시 왜 1을 더해야하나요?
1
62
2
혹시 강의를 빠르게 수강하려면 어디서부터 듣는게 좋을까요?
1
58
1
프로토타입과 함수간의 인자 불일치
1
81
2
12.12 헤더 관련 질문
1
63
2
Visual Studio Community 2026 사용 문의
1
149
2
Q. 15:30, 부호가 있는 8비트 정수 질문
1
65
2
getchar(), putchar()
1
96
3
강의자리ㅛ
1
85
2
비주얼스튜디오코드로 공부해도 상관없나요?
1
119
2
소스파일안에 여러 파일
1
80
2
F5와 F7의 차이
1
82
2
c = TWO * (a+b); 에서 a와 b는?
1
63
2
; 세미콜론을 붙이는 기준에 문의
1
72
1
Step over 기능 문의
1
57
2
2.6 강의 따옴표 출력 규칙 문의
1
81
2
int main 함수 관련 오류 문의
1
71
2
13.4 words[0]
0
64
2
11.7 함수를 구현해 봤습니다.
1
65
2
11.6 직접 strcmp와 strncmp를 구현해 보았습니다.
1
67
2
11.6 my_strcat과 my_strncat을 구현해봤습니다.
1
57
2
11.6 fit_str함수를 구현해 봤습니다.
1
56
2





