포인터로 배열 요소 접근 — 포인터 연산·배열 표기법과 포인터 표기법·포인터 순회 | 기초 C언어 10.2.3-2

기초 C언어Chapter 10 포인터 › Section 02 포인터 변수와 포인터의 활용

10.2.3-2 포인터로 배열 요소 접근

배열 이름이 시작 주소라는 사실에서 출발하는 포인터 연산. scores[i]와 *(scores + i)의 관계, 포인터 변수로 배열을 순회하는 방법과 10장 마무리.

교재 수록 위치
교재
『기초 C언어』 · 이은상 · 부크크 · 364쪽
단원
Chapter 10 포인터 › Section 02 포인터 변수와 포인터의 활용 › 포인터로 배열 요소 접근
쪽수
313p ~ 317p5쪽
세부 내용
포인터 연산의 원리 · 배열 표기법 vs 포인터 표기법 · CODE 10.7 · CODE 10.8
학습 목표
포인터 연산의 원리를 이해하고, 배열 표기법과 포인터 표기법 및 포인터 순회로 같은 요소에 접근하는 방법을 비교함
영상 목차 · 원하는 부분부터 보기
  1. 0:00 · 강의 소개와 포인터 연산
  2. 0:58 · 요소 크기에 따른 주소 이동
  3. 2:34 · 배열 표기법과 포인터 표기법
  4. 4:29 · 두 표기법의 출력 비교
  5. 6:26 · 포인터로 배열 전체 순회
  6. 9:15 · 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언어 교재 전체를 마무리.

이 절의 핵심 정리

  1. 배열의 요소는 메모리에 연속으로 놓이므로 시작 주소에 자료형의 크기만큼 더하면 다음 요소의 주소를 얻는다.
  2. int형 포인터에 1을 더하면 주소는 1이 아니라 int의 크기만큼 증가한다.
  3. 배열 표기법 scores[i]와 포인터 표기법 *(scores + i)는 같은 요소의 값을 가리킨다.
  4. 포인터 변수를 배열의 시작 주소에서 출발시켜 p++로 옮기면 인덱스 없이도 배열을 순회할 수 있다.
  5. 반복 조건의 scores + 3은 마지막 요소 바로 다음 주소로, 비교에만 쓰고 역참조하지 않는다.
강의 자료10.2.3-2 포인터로 배열 요소 접근 1 / 13

번호를 누르면 해당 장으로 바로 이동합니다 · 방향키 ← → 로도 넘길 수 있습니다
10장 마무리 — C언어 강의 목록에서 다음 학습 내용 확인 ↗

더 자세한 내용은 교재에서

이 글은 『기초 C언어』 313p~317p의 내용을 강의 영상에 맞춰 핵심만 간추린 요약입니다. 각 개념의 상세한 설명과 예제, 실습 코드, 임용시험 기출문제 풀이는 교재에서 다루고 있습니다.

댓글

이 블로그의 인기 게시물

2007년 국가직 9급 기계일반 기출문제 풀이

기계공작법 연습문제 130문 | 임용 기출 영상·교재 쪽수 바로가기