포인터의 기초 — 메모리·바이트·메모리 주소와 변수 이름의 연결 | 기초 C언어 10.1.1

기초 C언어Chapter 10 포인터 › Section 01 포인터와 메모리 주소

10.1.1 포인터의 기초

주소를 저장하는 변수, 포인터로 가는 첫걸음. 메모리를 바이트 단위 칸으로 보고 칸마다의 고유 주소와 변수 이름의 연결을 정리함.

교재 수록 위치
교재
『기초 C언어』 · 이은상 · 부크크 · 364쪽
단원
Chapter 10 포인터 › Section 01 포인터와 메모리 주소 › 포인터의 기초
쪽수
296p ~ 298p3쪽
세부 내용
포인터란? · 컴퓨터의 작업 공간, 메모리 · 모든 메모리 공간의 고유 주소 · 변수와 메모리 주소
학습 목표
메모리·메모리 주소·변수 이름의 관계를 구분하고, 값 대신 주소를 전달하는 발상의 필요성을 설명함
영상 목차 · 원하는 부분부터 보기
  1. 0:00 · 강의 소개와 포인터의 출발점
  2. 1:58 · 메모리와 고유 주소
  3. 4:30 · 변수 선언과 메모리 공간
  4. 6:26 · 값 대신 주소를 전달한다는 뜻
  5. 7:18 · 핵심 정리

01값에 의한 호출의 한계에서 출발교재 296p

  • 9장의 값에 의한 호출은 변수에 담긴 값만 복사해서 전달하는 방식. 함수 안에서 무엇을 바꾸어도 main 함수의 원본은 그대로였음.
  • 함수가 원본 변수에 접근하게 하려면 C언어의 중요한 기능인 포인터(Pointer)의 이해가 필요. 그 첫걸음이 메모리 주소의 개념.
  • 4.3.1에서 scanf 앞에 붙인 &, 곧 택배의 받는 주소처럼 값을 넣을 자리를 알려 준 표시도 이 장에서 정체가 드러남.

02포인터는 주소를 저장하는 변수교재 296p

  • 포인터 — C언어에서 메모리 주소를 저장하는 변수. 지금까지의 변수가 값을 담았다면 포인터는 주소를 담는 차이.
  • 이 편에서 살펴볼 내용은 세 가지. 컴퓨터의 작업 공간인 메모리, 칸마다 가지는 고유 주소, 변수 이름과 주소의 연결.

03바이트 단위 칸으로 나뉜 메모리교재 296p

  • 메모리(RAM) — 프로그램이 실행되는 동안 필요한 모든 데이터를 임시로 저장하는 거대한 작업 공간.
  • 메모리 공간은 수많은 바이트(byte) 단위의 칸으로 나뉨. 교재는 메모리를 아파트 건물 전체, 1바이트를 각 호실에 빗댐.
컴퓨터아파트 비유
메모리아파트 건물 전체
1바이트각 호실(101호, 102호, …)
메모리 주소호실마다 겹치지 않는 번호

04모든 바이트의 고유한 번호, 메모리 주소교재 297p

  • 메모리의 모든 바이트 공간은 서로 겹치지 않는 고유한 번호를 가짐. 이 번호가 메모리 주소.
  • 같은 번호의 칸은 둘이 없으므로 주소만 알면 정확히 그 칸을 찾아갈 수 있음.
  • CPU는 주소 값을 사용해 특정 위치에 데이터를 저장하거나 읽어 옴. 주소 값은 보통 0x7ffeea289b4c처럼 16진수로 표현.
  • 앞머리의 0x는 3.3.1에서 다룬 16진수 표시. 4.1.1에서 변수의 위치로 잠깐 본 0x로 시작하는 값이 바로 이 메모리 주소.

05변수 이름은 주소에 붙인 별명교재 298p

  • int score;를 선언하면 컴퓨터가 하는 일은 두 가지. int에 필요한 크기(예: 4바이트)만큼 빈 공간을 확보하고, score라는 이름을 실제 메모리 주소와 연결함.
  • 코드에서 score를 쓰는 것은 실제로는 ‘그 주소 번지의 데이터를 사용해 달라’는 요청과 같음. 이 과정을 컴파일러가 자동으로 처리하므로 지금까지는 주소를 몰라도 이름만으로 변수를 사용함.

변수에는 이름과 주소가 함께 있음

이름은 사람이 쓰는 별명이고, 컴퓨터가 실제로 찾아가는 것은 주소. 4바이트 변수라면 확보한 공간의 첫 칸 주소부터 4바이트가 그 변수의 자리임. 값·이름·주소를 서로 다른 것으로 구분해 두어야 포인터가 헷갈리지 않음.

06값 대신 주소를 알려 준다면교재 298p

  • 값에 의한 호출은 변수 안의 내용물(값)만 복사해서 전달. 값 대신 변수가 있는 메모리 주소 자체를 함수에 알려 주면, 함수는 그 주소를 찾아가 원본 값을 읽고 수정할 수 있음.
  • 정리하면 메모리는 칸, 메모리 주소는 칸의 번호, 변수 이름은 번호에 붙인 별명, 포인터는 그 번호를 담는 변수라는 관계.
  • 이 발상의 구체적인 방법은 10장의 이어지는 편에서 차례로 다룸. 다음 10.1.2에서는 주소를 알아내는 &와 주소로 값을 꺼내는 *를 살펴볼 예정.

이 절의 핵심 정리

  1. 포인터는 C언어에서 메모리 주소를 저장하는 변수이다.
  2. 메모리는 프로그램 실행 중 데이터를 임시로 저장하는 공간이며 바이트 단위의 칸으로 나뉜다.
  3. 메모리의 모든 바이트는 서로 겹치지 않는 고유한 번호인 메모리 주소를 가지며, 주소는 보통 16진수로 표현한다.
  4. 변수를 선언하면 자료형 크기만큼 공간이 확보되고 변수 이름이 그 실제 주소와 연결된다.
  5. 값 대신 주소를 함수에 알려 주면 함수가 원본 변수의 값을 읽고 수정할 수 있게 된다.
강의 자료10.1.1 포인터의 기초 1 / 10

번호를 누르면 해당 장으로 바로 이동합니다 · 방향키 ← → 로도 넘길 수 있습니다
다음 절 · 10.1.2 주소 연산자와 역참조 연산자 교재 299p~301p — 변수에서 주소를 얻는 &와 주소에서 값을 꺼내는 * ↗

더 자세한 내용은 교재에서

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

댓글

이 블로그의 인기 게시물

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

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