본문 바로가기

Study/C C++

[두들낙서] 포인터

포인터

 - 변수의 주소를 저장하는 변수다

 - 포인터는 가리킬 변수의 형, '*', 포인터 이름 순으로 선언한다

 - 포인터 앞에 '*'를 입력하면 포인터가 가리키는 변수의 값을 나타낸다  *ptr_a == a

 - 포인터에 1을 더하면 포인터 주소에 지정된 형의 크기만큼 더해진다  int의 포인터면 4가 더해진다

 - 배열에서 포인터에 1을 더하면 다음 원소를 가리킨다 &a[0] + 1 = &a[1]

 

 주의 변수의 주소는 상황마다 달라질 수 있으므로 절대적인 값을 가지지 않는다

 ex) int a = 20;

      int *ptr_a;

      ptr_a = &a;  위의 2줄을 int *ptr_a = &a로 구현 가능하다

      *ptr_a = 10;  a의 값이 10이 된다

 

배열과 포인터 관계 정리

 - ptr == &ptr[0]

 - *ptr == ptr[0]

 - ptr + 1 == ptr에 sizeof(*ptr)을 더한 값  sizeof(*ptr)은 ptr이 가리킨 변수의 크기

 - *(ptr + i) == ptr[i] == i[ptr]  C언어는 a[b]를 실행할 때 *(a + b)로 실행한다

 

배열 포인터

 - 배열을 가리키는 포인터  배열 전체를 가리킨다

 - 배열 포인터는 가리킬 변수의 형, (*포인터 이름), [] 순으로 선언한다

 ex) int(*ptr_arr)[3];  길이 3인 int형 배열을 가리키는 포인터를 선언

 

배열 포인터

 - 포인터들을 값으로 가진 배열

 - 배열 포인터는 가리킬 변수의 형, *포인터 이름, [] 순으로 선언한다

 ex) char strings[3][10] = {"Hello", "World", "Doodle"};

      char *p_str[3];

      for (int i = 0; i < 3; i++) {

           print("%s\n", &strings[i][0]);  &strings[i][0] == strings[i] 이므로 print("%s\n", strings[i]);로 써도 된다

      }

      for (int i = 0; i < 3; i++) {

           p_str[i] = strings[i];

      }

      for (int i = 0; i < 3; i++) {

           print("%s\n", p_str[i]);  p_str[i]는 strings[i][0]의 주소값과 같다

      }

'Study > C C++' 카테고리의 다른 글

[두들낙서] 구조체  (0) 2021.03.01
[두들낙서] 함수  (0) 2021.03.01
[두들낙서] 배열  (0) 2021.02.28
[두들낙서] 반복문  (0) 2021.02.28
[두들낙서] 조건문  (0) 2021.02.26