포인터로 배열 요소 접근 — 포인터 연산·배열 표기법과 포인터 표기법·포인터 순회 | 기초 C언어 10.2.3-2
기초 C언어Chapter 10 포인터 › Section 02 포인터 변수와 포인터의 활용
10.2.3-2 포인터로 배열 요소 접근
배열 이름이 시작 주소라는 사실에서 출발하는 포인터 연산. scores[i]와 *(scores + i)의 관계, 포인터 변수로 배열을 순회하는 방법과 10장 마무리.
영상 목차 · 원하는 부분부터 보기
01시작 주소에서 나머지 요소로교재 313p
- 앞 편의
p = scores;처럼 배열 이름은 첫 번째 요소의 주소. 이 사실이 주소 하나로 나머지 요소에 닿는 길을 엶. - 포인터 연산(Pointer Arithmetic) — 포인터에 덧셈과 뺄셈을 하는 연산. 이것으로 배열의 모든 요소에 접근 가능.
- 8.1.3에서 for 문과 인덱스로 하던 배열 순회를 이번에는 주소로 다시 살피는 편.
02p + 1은 1바이트가 아니라 한 요소만큼교재 313~314p
- 배열의 요소는 메모리에 빈틈없이 연속으로 나열됨. 한 요소의 주소에 자료형의 크기만큼 더하면 바로 다음 요소의 주소.
- 포인터 연산은 이 계산을 컴파일러가 자동으로 처리하는 기능. int형 포인터 p에
p + 1을 하면 주소가 1이 아니라 int의 크기(보통 4바이트)만큼 증가.
더한 수와 늘어난 주소는 다름
int형 포인터에서 p + 2는 주소가 2가 아니라 8만큼 큰 곳, 곧 세 번째 요소의 주소. 포인터에 더하는 수는 바이트 수가 아니라 요소 개수로 읽어야 함.
03scores[i]는 *(scores + i)와 같음교재 314~315p
| 표기법 | 형태 | 읽는 법 |
|---|---|---|
| 배열 표기법 | scores[i] | 인덱스 i 요소의 값, 익숙하고 직관적 |
| 포인터 표기법 | *(scores + i) | 시작 주소에서 i칸 뒤 주소를 계산해 역참조 |
- 포인터 표기법은 세 부분. scores는 시작 주소, scores + i는 인덱스 i 요소의 주소, *( )는 그 주소의 실제 값.
- i가 1이면 인덱스 1 요소, 곧 두 번째 요소를 가리킴. 인덱스와 몇 번째 요소인지를 구분할 것.
04두 표기법의 출력 비교교재 315~316p
- CODE 10.7 — 요소가 {90, 85, 100}인 배열을 for 문으로 두 번 출력. 한 번은 scores[i], 한 번은 *(scores + i) 사용.
- 두 구분선 아래 모두 90, 85, 100이 차례로 출력되어 두 표기법이 같은 의미임을 확인. 상세 코드는 교재 CODE 10.7.
05포인터 변수로 배열 순회교재 316~317p
- CODE 10.8 — 인덱스 변수 i 대신 포인터 p로 순회. p를 scores에서 출발시켜 p++로 다음 요소로 옮기며 *p를 출력하는 구성. 결과는 90, 85, 100의 세 줄.
- p++는 5.1.3의 증가 연산자. 한 번에 1씩 커지지만 실제 주소는 int의 크기만큼 늘어남.
- 반복 조건의 scores + 3은 마지막 요소 바로 다음 주소. p가 여기에 이르면 반복 종료이며, 이 주소는 비교에만 쓰고 역참조하지 않음.
06두 표기법을 함께 알아 둘 까닭과 10장 마무리교재 317p
- 일반적으로는 가독성이 좋은 배열 표기법이 더 널리 쓰임. 다만 포인터와 배열이 내부에서 어떻게 동작하는지 이해하려면 포인터 표기법도 알아 두어야 함.
- 10장은 메모리 주소에서 출발해 &와 *, 포인터 변수, 값에 의한 호출의 한계와 참조에 의한 호출, 배열 이름과 포인터 연산까지 정리. 이 편으로 10장 포인터와 기초 C언어 교재 전체를 마무리.
이 절의 핵심 정리
- 배열의 요소는 메모리에 연속으로 놓이므로 시작 주소에 자료형의 크기만큼 더하면 다음 요소의 주소를 얻는다.
- int형 포인터에 1을 더하면 주소는 1이 아니라 int의 크기만큼 증가한다.
- 배열 표기법 scores[i]와 포인터 표기법 *(scores + i)는 같은 요소의 값을 가리킨다.
- 포인터 변수를 배열의 시작 주소에서 출발시켜 p++로 옮기면 인덱스 없이도 배열을 순회할 수 있다.
- 반복 조건의 scores + 3은 마지막 요소 바로 다음 주소로, 비교에만 쓰고 역참조하지 않는다.
강의 자료10.2.3-2 포인터로 배열 요소 접근
1 / 13
번호를 누르면 해당 장으로 바로 이동합니다 · 방향키 ← → 로도 넘길 수 있습니다

댓글
댓글 쓰기