포인터 주소값을 출력 했을 경우 궁금한 점이 있습니다.
내꺼
질문 제목 :
포인터와 배열 주소값 출력에 대해서..
빨강색 주석문이 질문 내용입니다.
int* pi을 선언 햇을경우
ip에 배열 첫번째 주소값을 대입했는데 그 주소값을 출력 했을 경우 &(ip)가 아닌 &(*ip)로 해야 되는 이유를 모르겠습니다.질문 내용 :
void main()
{
int arr[]={5,2,3,4,5};
int *pi;
printf(첫번째 요소%d\n,&(*pi)); //운영체제가 메모리에 할당한 int* pi의 주소값 출력
pi=arr; //배열 arr의 첫번째 주소값을 pi에 대입
printf(arr[0] 요소 주소값%d\n,&(arr[0]));//arr[0]번째 주소값 출력
printf(첫번째 요소%d\n,&(pi)); //그럼 여기서 arr의 첫번째 주소값이 출력 된다고 생각 했으나 값이 틀리네요
printf(첫번째 요소%d\n,&(*pi));//&(*pi)이렇게 해줘야arr[0]번째 주소값 출력 해줘야 제대로 값이 나옵니다.
printf(arr[0] 요소 주소값%d\n,&(arr[0]));//생략
printf(arr[1] 요소 주소값%d\n,&(arr[1]));//생략
printf(첫번째 요소%d\n,&(*pi));
pi++;
printf(첫번째 요소%d\n,&(*pi));
-
민구
질문게시판에는 덧글을 포함해서 반드시 돋움체 또는 굴림체를 사용해야 됩니다.
이 폰트로 계속해서 덧글을 쓰면 탈퇴가 됩니다.
폰트는 자신의 블로그에서 설정할 수 있습니다. -
으뜸
답변 감사합니다. 아직 포인터에 대한 개념이 부족한듯 싶네요... 더 열심히 공부 해야겠습니다.
-
벛꽃잎
포인터 자신도 변수 입니다. 그 자신도 스택에 잡히는 지역변수이고 메모리의 한 부분을 차지하고 있죠.
&pi : 포인터 변수 자신의 주소값 (배열arr 의 주소값이 아님)
pi : 포인터 변수가 저장하고 있는 주소값
&*pi : 포인터 변수가 가리키고 있는 곳의 주소값 (pi와 동일한 값)
*pi : 포인터 변수가 가리키고 있는 곳의 값