포인터 변수의 선언과 사용 — 자료형 *이름 선언·주소 저장·역참조와 두 가지 * | 기초 C언어 10.2.1

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

10.2.1 포인터 변수의 선언과 사용

주소 값 자체를 저장하는 포인터 변수. 선언 형식, 주소 저장과 역참조의 두 단계, 같은 기호 *의 두 가지 의미를 정리함.

교재 수록 위치
교재
『기초 C언어』 · 이은상 · 부크크 · 364쪽
단원
Chapter 10 포인터 › Section 02 포인터 변수와 포인터의 활용 › 포인터 변수의 선언과 사용
쪽수
302p ~ 305p4쪽
세부 내용
포인터 변수 · 포인터 변수 선언하기 · 주소 저장과 역참조 · CODE 10.3 · 포인터 선언의 *와 역참조의 *
학습 목표
포인터 변수를 선언해 다른 변수의 주소를 저장하고, 역참조로 원본 변수의 값을 읽고 바꾸는 과정을 설명함
영상 목차 · 원하는 부분부터 보기
  1. 0:00 · 강의 소개와 포인터 변수
  2. 1:38 · 자료형에 따른 포인터 선언
  3. 3:21 · 주소 저장과 역참조
  4. 4:19 · 포인터로 값을 바꾸는 예제
  5. 8:39 · 별표의 두 가지 의미
  6. 9:33 · 핵심 정리

01주소를 담아 두는 변수교재 302p

  • 앞 편에서는 &로 변수의 주소를 알아내고 *로 값을 꺼냈지만, 구한 주소를 어디에도 담아 두지 않았음.
  • C언어는 메모리 주소 값 자체를 저장하는 특별한 변수를 제공. 이것이 포인터 변수(Pointer Variable), 간단히 포인터.
  • 일반 변수가 ‘집’ 자체라면 포인터 변수는 ‘집의 주소가 적힌 쪽지’. 실제 데이터 값이 아니라 데이터가 있는 위치(주소)를 가리킴(point).

02선언 형식 — 자료형 *포인터_변수이름;교재 303p

  • 일반 변수와 비슷하게 선언하되 이름 앞에 애스터리스크(*)를 붙여 구분.
  • 자료형은 포인터가 가리킬 변수의 자료형. ‘어떤 종류의 집 주소’를 저장할지 밝히는 부분.
  • *는 이 변수가 주소를 저장하는 포인터 변수임을 컴파일러에게 알리는 기호.
선언저장하는 주소
int *p_int;int형 변수의 주소
double *p_double;double형 변수의 주소
char *p_char;char형 변수의 주소
  • int *p_int;는 ‘p_int는 int형 변수를 가리키는 포인터’로 읽음. 세 선언에서 달라지는 것은 가리킬 변수의 자료형뿐.

03사용은 주소 저장과 역참조 두 단계교재 303p

  • 주소 저장 — & 연산자로 다른 변수의 주소를 포인터 변수에 대입. 예: p = # 이후 p는 num을 가리킴.
  • 역참조 — * 연산자로 포인터가 가리키는 주소에 저장된 실제 값에 접근. 예: *p.
  • 앞 편의 *(&score)와 같은 일을 이번에는 주소를 담아 둔 포인터 p를 거쳐서 수행하는 구조.

04포인터로 num의 값 바꾸기교재 304~305p

  • CODE 10.3 — num을 10으로 초기화하고 p에 num의 주소를 저장한 뒤, *p = 20;으로 값을 바꾸는 구성. 상세 코드는 교재 CODE 10.3.
  • 결과에서 num과 *p는 모두 10, &num과 p에는 같은 주소. 값을 바꾸는 문장에 num이 없는데도 마지막 출력의 num은 20.
  • p라는 쪽지에 num의 집 주소를 적고, 그 주소로 찾아가 집 안의 값을 바꾼 결과. 주소를 통하면 멀리 떨어진 곳에서도 원본 데이터를 읽고 수정 가능.

05*p는 num 칸 자체교재 305p

  • 4.2.2에서 등호 왼쪽에는 변수가 온다고 했고 8.1.2에서 배열 요소까지 넓힘. *p도 num이라는 칸 자체를 나타내므로 등호 왼쪽에 올 수 있음.
  • num과 *p는 두 이름이 같은 공간을 가리키는 관계. 어느 쪽으로 바꾸어도 같은 칸의 값이 바뀜.

06같은 기호 *의 두 가지 의미교재 305p

선언의 *와 역참조의 *를 혼동하지 말 것

int *p;의 *는 p가 포인터 변수라는 표시. *p = 20;의 *는 p가 가리키는 주소로 찾아가 그 위치의 값을 사용하라는 뜻. 선언할 때 이름 앞에 붙으면 선언의 *, 선언을 마친 포인터 앞에 붙으면 역참조의 *로 쓰이는 위치에 따라 의미가 다름.

  • 포인터로 멀리 있는 변수의 값을 바꿀 수 있게 되었으므로 9장에서 막혔던 문제를 풀 준비가 됨. 다음 10.2.2에서는 값에 의한 호출 예제부터 다시 살펴볼 예정.

이 절의 핵심 정리

  1. 포인터 변수는 메모리 주소 값 자체를 저장하는 변수로, 집의 주소가 적힌 쪽지와 같다.
  2. 포인터 변수는 자료형 *포인터_변수이름; 형식으로 선언하며 자료형은 가리킬 변수의 자료형이다.
  3. &로 다른 변수의 주소를 포인터에 저장하고 *로 그 주소에 저장된 값에 접근한다.
  4. *p = 20;처럼 포인터를 역참조해 대입하면 포인터가 가리키는 원본 변수의 값이 바뀐다.
  5. 선언의 *는 포인터 변수라는 표시이고 역참조의 *는 가리키는 주소의 값을 사용하라는 뜻이다.
강의 자료10.2.1 포인터 변수의 선언과 사용 1 / 12

번호를 누르면 해당 장으로 바로 이동합니다 · 방향키 ← → 로도 넘길 수 있습니다
다음 절 · 10.2.2-1 값에 의한 호출 예제 교재 306p~307p — 두 값을 맞바꾸는 swap 함수로 다시 확인하는 값에 의한 호출 ↗

더 자세한 내용은 교재에서

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

댓글

이 블로그의 인기 게시물

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

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