연재 완료/C Lang 이론

C언어 이론 8. 포인터 (배열과 포인터)

라이피 (Lypi) 2018. 5. 23. 18:28
반응형

내용 출처 : YES C (정보공학연구소 /생능출판사)

                  혼자 연구하는 C/C++ (SoEn.kr /와우북스)



Ⅰ. 배열과 포인터

   ① 임의의 자료형 T가 있으면 T형 배열도 T형 포인터도 언제나 선언할 수 있다.

   ② C언어 내부적으로는 모든 배열은 메모리에 순차적으로 저장된다.

   ③ 즉, n차원 배열도 내부적으로는 배열의 배열로 메모리에는 순차적으로 저장되어 있다.

   ④ 배열의 이름은 배열의 시작 위치를 가리키는 포인터 상수이다. 

   ⑤ 정수 포인터에서 1을 더하면 현재 가리키고 있는 주소에서 정수 사이즈만큼 이동한 곳을 가리킨다.

   ⑥ 포인터들의 배열도, 배열의 포인터도 가능하다. (①에 의해서) 

   ⑦ n차원 배열에서도 포인트의 가감연산만으로 배열의 모든 요소를 참조할 수 있다.  (② ~ ⑤에 의해서)

    

Ⅱ. [ ]연산자

   ① [ ] 연산자의 정확한 정의 : (ptr이 임의의 배열을 가리키는 포인터이고 n이 정수일 때)  ptr[n] = *(ptr+n)

   ② 그래서 ⑴ ar[2] ⑵ *(ar+2) ⑶ 2[ar] 는 모두 같은 동작을 한다. (⑶처럼은 거의 쓰지 않지만)


Ⅲ. 포인터 배열

   ① 포인터 배열이란 '배열의 각 요소가 포인터인 배열'이다.

   ② T형 포인터를 요소로 삼는 배열은 T* 배열이름[요소갯수]로 선언한다. (*의 위치는 상관없다.)

   

   // 주로 문자열의 포인터 배열이 예시로 나오는데 vs2017이상의 C++환경에서 C를 구동할 때는 에러가 난다. 

   // 혹은 동적 할당을 사용해야하는데 책에서는 이 내용이 다음 장에 나오므로 일단 넘긴다.


Ⅳ. 배열 포인터

   ① 배열 포인터란 '배열의 번지를 담는 포인터'이다. 

   ② 1차원 배열에서는 배열 이름으로 이를 처리할 수 있으므로 의미가 없고, 2차원 이상의 배열에서 부분 배열을 표현하기 위해서 사용된다.

   ③ T형 배열의 번지를 담는 배열 포인터는 T (*포인터명)[2차 첨자 크기] 로 선언한다. (괄호를 생략하면 포인터 배열이 되므로 생략할 수 없다.)

  

 // 이것도 이 이상의 내용은 일단 생략. 

반응형