매일공부

포인터/배열 본문

임베디드 개발자/코딩

포인터/배열

임베디드초보자 2022. 1. 19. 23:49

1. 포인터란

  • 다른 변수, 변수의 메모리 공간 주소를 가리키는 변수를 말한다.
  • 포인터가 가리키는 주소를 가저오는 것을 역참조라 한다.
  • C, C++, 등 하위 레벨까지 제어 가능
  • int > 정수형 변수 | char > 문자형 변수 |포인터> 포인터 변수(변수의 주소)
#include <stdio.h>

void main() {
    char ch;
    char* p;//문자형 변수와 포인터 변수를 선언

    ch = 'A';
    p = &ch;//문자 'A'를 ch에 대입하고 ch 의 주소를 p에 대입한다.

    printf("ch가 가지고 있는 값: ch > %c \n", ch);//ch 가 가지고 있는 값  결과: A
    printf("ch가 가지고 있는 값: ch > %d \n", &ch);//ch의 주소 &ch        결과: 100
    printf("ch가 가지고 있는 값: ch > %d \n", p);// p가 가지고 있는 값    결과: 100
    printf("ch가 가지고 있는 값: ch > %c \n", *p);//p가 가리키고 있는 곳의 값 결과 p
}

포인터 설명

  1. 현재 ch 의 주소는 100이다.(ch는 a라는 값을 가지고 있다.)
  2. p의 주소는 어디여도 상관 없다.  100238989번지 일 수도 있고 128478 일 수도 있다.
  3. 여기서는 설명을 위해 102~105번지에 p가 있다고 했다.
  4. 중요한 것은
    1. ch의 주소는 100이다(("%d",&ch)를 통해 주소를 알 수 있다.)
    2. p가 가지고 있는 값은 ch의 주소와 동일한 100이다
      (단순히 포인터 변수인 p의 값을 출력했을 때 가리키는 주소가 출력된다.)
    3. 가리키는 곳의 값을 확인할 수 있다.(*p 를 통해 주소 100이 실제로 가지는 값을 출력할 수 있다.)
  5. 이러한 사항을 알아둔다면 간단한 포인터의 정의를 알 수 있을 것이다.

2.포인터를 왜쓰는가?

  1. 우리가 남의 집을 갈 때 주소를 알아야 갈 수 있고 그 주소를 찾아 헤매야한다.
  2. 포인터는 이를 쉽게 만들어준다. 직접 찾아야하는 주소를 우리가 알려줌으로서 용량 및 처리시간에 이득을 준다.

또한 배열에서도 포인터는 빈번하게 쓰이는데 ... 이는 다음에 알아보자 !!