[KOCW 한국산업기술대학교 박정민 교수님] C 프로그래밍 13강

MinWoo Park·2021년 8월 24일
0

KOCW

목록 보기
13/19
post-thumbnail

Part13 포인터와 배열

13.1 포인터와 1차원 배열

포인터 변수를 통한 1차원 배열 요소의 주소 접근

  • 배열의 시작 주소를 저장

포인터 변수를 통한 1차원 배열 요소의 값 접근

  • * 연산자 사용

포인터 변수와 배열의 크기 차이

  • 포인터 변수: 32비트(4바이트), 64비트(8바이트)로 고정
  • 배열: 배열 길이에 따라 가변적

13.2 포인터와 2차원 배열

2차원 배열에서 *(array+i) == *&array[i] == array[i]는 주소를 표현한다

  • 1차원 배열일 때 *(array+i) == array[i] == *&array[i]는 값
  • 2차원 배열일 때 *(array+i) == array[i] == *&array[i]는 주소

13.3 포인터 배열

1차원 포인터 변수를 이용해서 2차원 배열처럼 접근할 수는 없을까?

배열 포인터 변수

int (*p)[3];
자료형/배열 포인터 변수 이름/열 길이
  • 열을 지정 할 수 있는 포인터
  • 자료형: 배열 포인터 변수가 저장하는 배열의 자료형
  • 배열 포인터 변수 이름: * 연산자와 배열 포인터 변수 이름을 함께 괄호로 묶음
  • 열의 길이: 배열 포인터 변수가 가리키는 배열의 열의 길이를 지정

포인터 배열

포인터 변수의 개수가 많아지는 단점을 보완하는 방법
주소를 저장하는 배열을 뜻함.

int* pointer[3];
자료형/ 포인터 배열 이름/ 배열 길이
  • 자료형: 포인터 배열의 자료형을 지정, 자료형 다으멩 * 연산자를 붙임
  • 포인터 배열 이름: 주소를 저장할 배열의 이름을 지정
  • 배열 길이: 주소를 저장할 배열의 전체 길이를 지정

포인터 배열과 배열 포인터 변수의 차이

  • 배열 포인터 변수: int (*p)[3] = NULL;
    - 3열 짜리 2차원 배열의 주소를 저장할 수 있는 변수, 메모리가 4바이트짜리 한 개
  • 포인터 배열: int* p[3]={NULL, NULL, NULL};
    - 괄호가 생략되어 있으며, 주소를 저장할 수 있는 배열, 메모리카 4바이트짜리 세 개

13.4 포인터와 문자 그리고 포인터와 문자열

문자열과 NULL 문자

  • 문자열은 문자들이 메모리 공간에 연속적으로 저장되어 있어 보통 주소로 관리
  • 입출력시 서식 문자 %s를 사용
  • 문자열의 맨 끝에는 문자열의 끝을 알리는 종료 문자, '\0'이 삽입되어 있음. 이러한 문자를 Null 문자라고 함

포인터 변수의 상수화

  • 포인터 변수에 다른 메모리 공간의 주소를 저장하지 못하게 한다. 하나의 주소만 저장
  • 포인터 변수를 통해 메모리 공간의 값을 변경하지 못하게 한다. 직접적인 접근을 통해서만 값 변경
  • 위의 두 개를 다 못하게 한다

Reference
강의: 박정민, 『C 프로그래밍』, KOCW 한국산업기술대학교, 13강
교재: 박정민, 『열혈강의 C 언어 본색 명강의가 일으키는 C 언어 기적』, 프리렉 (2011), p370-430.

profile
물음표를 느낌표로 바꾸는 순간을 사랑하는 개발자입니다.

0개의 댓글