Programming/etc

C언어 포인터(pointer)에 관하여

esoog Polaris 2023. 7. 18. 12:11
반응형

# 포인터

다른 변수의 메모리 주소를 저장하는 변수로,

`&`는 주소 연산자(Address-of Operator)이고,

`*`는 역참조 연산자(Dereference Operator)입니다.

 

 

 


1. & (주소 연산자: Address-of Operator):
   - `&`는 변수의 주소를 가져오는 역할을 합니다.
   - 변수 앞에 `&`를 붙여 사용합니다.
   - 예시:

     int num = 42;
     int *ptr = #


     위의 예시에서 `&num`은 변수 `num`의 주소를 가져옵니다. 이를 포인터 변수 `ptr`에 저장할 수 있습니다.

(주소는 0x7fff5fbff82c 이런 형식임)

 

 

 


2. * (역참조 연산자: Dereference Operator):
   - `*`는 포인터가 가리키는 주소에 저장된 값을 참조합니다.
   - 포인터 변수 앞에 `*`를 붙여 사용합니다.
   - 예시:

     int num = 42;
     int *ptr = #
     int value = *ptr;


     위의 예시에서 `*ptr`은 포인터 변수 `ptr`이 가리키는 주소에 저장된 값을 가져옵니다. 이를 변수 `value`에 저장할 수 있습니다.

 

 

 


간단히 말하면, `&`는 변수의 주소를 가져오는 것이고, `*`는 포인터가 가리키는 주소에 저장된 값을 가져오는 것입니다. 이 두 연산자를 함께 사용하면 변수의 주소를 저장하고, 그 주소를 통해 값을 참조하는 포인터를 다룰 수 있습니다.

예시를 통해 설명하겠습니다.

int main() {
  int num = 42;
  int *ptr = #  // 변수 num의 주소를 포인터 ptr에 저장

  printf("num의 값: %d\n", num);  // num의 값 출력
>42

  printf("num의 주소: %p\n", &num);  // num의 주소 출력
>0x7fff5fbff82c

  printf("ptr이 가리키는 값: %d\n", *ptr);  // ptr이 가리키는 주소에 저장된 값 출력
>42

  printf("ptr의 값(주소): %p\n", ptr);  // ptr의 값(주소) 출력
>0x7fff5fbff82c

  return 0;
}


위의 예시에서 `&num`은 `num`의 주소를 가져오고, `*ptr`은 `ptr`이 가리키는 주소에 저장된 값을 가져옵니다. 이를 출력하여 확인하면 `num`의 값과 주소, `ptr`이 가리키는 값과 주소를 확인할 수 있습니다.

728x90