내용 출처 : 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차 첨자 크기] 로 선언한다. (괄호를 생략하면 포인터 배열이 되므로 생략할 수 없다.)
// 이것도 이 이상의 내용은 일단 생략.