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

김효정님의 프로필 이미지
김효정

작성한 질문수

홍정모의 따라하며 배우는 C언어

10.4 포인터와 배열

포인터

작성

·

206

1

int* ptr = arr;

printf("%p %p", ptr, arr);

 

이럴 때 ptr은 arr주소로 가는 것이라 ptr의 주소는 따로 있다고 생각을 했거든요. 그래서 둘의 주소값이 다르다고 생각했는데 왜 같게 나오는 건가요..

계속 이어서 수강했는데, 어디 강의로 가야 이에 대한 설명을 들을 수 있을까요, 아니면 여기서 설명해주시면 감사하겠습니다.

답변 1

2

안녕하세요, 답변 도우미 Soobak 입니다.

위 코드에서 ptr 이 가리키는 주소는 ptr 변수에 저장된 값으로, arr 배열의 첫 번째 원소의 주소입니다. (배열의 이름은 포인터와 호환이 되는 형태입니다.)

반면, 의문을 가지신 ptr 변수 자체의 주소는 &ptr 을 통해서 표현되며, ptr 변수가 메모리에서 위치한 주소입니다.

각각의 주소에 대한 예시 코드를 첨부드립니다.

#include <stdio.h>

int main()
{
    int arr[5] = {1, 2, 3, 4, 5};
    int* ptr = arr;

    printf("ptr이 가리키는 주소: %p\n", ptr);  // arr의 주소, 즉 배열의 첫 번째 원소의 주소
    printf("arr의 주소: %p\n", arr);         // 마찬가지로 배열의 첫 번째 원소의 주소

    printf("ptr 변수의 메모리 주소: %p\n", &ptr);  // ptr 변수 자체의 메모리 주소

    return 0;
}
김효정님의 프로필 이미지
김효정

작성한 질문수

질문하기