c 언어 포인터 정복하기 -...

19
TAE-HYONG KIM COMPUTER ENG, KIT C 언어 포인터 정복하기

Upload: others

Post on 06-Sep-2019

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: C 언어 포인터 정복하기 - elearning.kocw.netelearning.kocw.net/contents4/document/lec/2013/Kumoh/KimTaehyeong/1.pdf · c 언어의 많은 부분과 연관성을 가짐 본

TAE-HYONG KIM

COMPUTER ENG, KIT

C 언어 포인터 정복하기

Page 2: C 언어 포인터 정복하기 - elearning.kocw.netelearning.kocw.net/contents4/document/lec/2013/Kumoh/KimTaehyeong/1.pdf · c 언어의 많은 부분과 연관성을 가짐 본

목적

C 언어에서 가장 어려운 부분은? 포인터(Pointers)!

C 언어의 많은 부분과 연관성을 가짐

본 강의는 다음 기법을 이용하여 C 포인터의 개념과 사용법을 명확히 습득하는 것을 목적으로 함 시각적 모델링

필요성, 사용법 등의 논리적 설명

프로그래밍 패턴

2

Page 3: C 언어 포인터 정복하기 - elearning.kocw.netelearning.kocw.net/contents4/document/lec/2013/Kumoh/KimTaehyeong/1.pdf · c 언어의 많은 부분과 연관성을 가짐 본

강의 구성 (1)

1강. 들어가기 : C 언어 기초 복습

2강. 배열로 시작하기

3강. 포인터 없이 배열 사용하기

4강. 배열로 문자열 처리하기

5강. 포인터의 개념 이해하기

6강. 포인터를 저장하자

7강. 배열과 포인터의 관계 이해하기

8강. 포인터로 함수 넘나들기

3

Page 4: C 언어 포인터 정복하기 - elearning.kocw.netelearning.kocw.net/contents4/document/lec/2013/Kumoh/KimTaehyeong/1.pdf · c 언어의 많은 부분과 연관성을 가짐 본

강의 구성 (2)

9강. 포인터로 문자열 다루기

10강. 포인터로 포인터 가리키기

11강. 포인터로 이차원배열 다루기

12강. 특별한 자료를 가리키는 포인터

13강. 메모리에 직접 접근하기

14강. 구조체의 개념과 특징

15강. 포인터로 구조체 다루기

16강. 포인터로 자료 구조화하기

4

Page 5: C 언어 포인터 정복하기 - elearning.kocw.netelearning.kocw.net/contents4/document/lec/2013/Kumoh/KimTaehyeong/1.pdf · c 언어의 많은 부분과 연관성을 가짐 본

C 언어 포인터 정복하기

TAE-HYONG KIM

COMPUTER ENG, KIT

1강. 들어가기 – C언어 기초 복습

Page 6: C 언어 포인터 정복하기 - elearning.kocw.netelearning.kocw.net/contents4/document/lec/2013/Kumoh/KimTaehyeong/1.pdf · c 언어의 많은 부분과 연관성을 가짐 본

학습 내용

C언어 학습

C언어와 메모리

자료형

변수의 사용

코드의 구성

연산자

반복문

조건문

함수

6

Page 7: C 언어 포인터 정복하기 - elearning.kocw.netelearning.kocw.net/contents4/document/lec/2013/Kumoh/KimTaehyeong/1.pdf · c 언어의 많은 부분과 연관성을 가짐 본

C언어 학습

C 언어도 일종의 언어다

C 언어를 어떻게 공부해야 할까?

전통적 방법의 언어 공부 방식

단어(Word), 문장(Sentence), 문법(Grammar), …

읽기/쓰기, 듣기/말하기, …

최근의 실용적 공부 방식

주요 패턴 방식의 어법(Usage) 연습

C언어 학습에 적합한 방법은?

7

Page 8: C 언어 포인터 정복하기 - elearning.kocw.netelearning.kocw.net/contents4/document/lec/2013/Kumoh/KimTaehyeong/1.pdf · c 언어의 많은 부분과 연관성을 가짐 본

C언어와 메모리

C언어의 특징 구조적 프로그래밍 언어(고수준) 컴퓨터 자원에의 접속성 제공(저수준)

메모리(Main memory) 기본저장 단위: Byte (문자) 메모리 접근 메모리 주소로

• 각 바이트에 주소 할당

데이터 저장 및 처리 • 데이터의 형식과 프로세서에 따라 다름

프로그램(프로세스) 메모리 영역 Code(프로그램) Data(전역/정적변수) : 0으로 초기화 됨 Stack(지역/자동변수) : 초기화안됨 Heap(동적할당)

8

Page 9: C 언어 포인터 정복하기 - elearning.kocw.netelearning.kocw.net/contents4/document/lec/2013/Kumoh/KimTaehyeong/1.pdf · c 언어의 많은 부분과 연관성을 가짐 본

기본 자료형

정수형 char (1B), short (2B), int (4B)

실수형 float (4B), double (8B)

변수 및 상수 모두 특정 자료 형(type)을 가지며 메모리공간에 정해진 크기로 저장된다 상수: 저장 공간의 저장 값을 바꿀 수 없음

변수: 저장 공간의 저장 값을 바꿀 수 있음

변수의 선언 어떤 자료형의 어떤 변수(이름)를 사용하는 지 알려줌

Page 10: C 언어 포인터 정복하기 - elearning.kocw.netelearning.kocw.net/contents4/document/lec/2013/Kumoh/KimTaehyeong/1.pdf · c 언어의 많은 부분과 연관성을 가짐 본

변수의 사용

1) 변수에 저장된 값을 사용 (R-value로 사용)

int a = 10, b = 0;

b = a + 1; printf(“%d”, a);

값이 변경되지 않음

2) 저장공간에 값을 저장함 (L-value로 사용)

int a = 10, b = 0;

b = a + 1; a++;

값을 변경하려고 시도함

Page 11: C 언어 포인터 정복하기 - elearning.kocw.netelearning.kocw.net/contents4/document/lec/2013/Kumoh/KimTaehyeong/1.pdf · c 언어의 많은 부분과 연관성을 가짐 본

코드의 구성

기본 구성단위는 식(expression)이다

int a = 10, b = 0;

a, a+1, printf(…), a = a+1, …

변수, 상수 그대로도 식이 된다

식은 식의 값을 갖는다.

식은 연산(자), 함수(호출)에 의해 확장된다

기본 실행단위는 문장(statement)이다

식 + ‘;’ 문장이 된다

{문장1 문장2} 한 문장으로 만들 수 있다

특정 구조의 문장: if 문장(조건문), for 문장(반복문), …

Page 12: C 언어 포인터 정복하기 - elearning.kocw.netelearning.kocw.net/contents4/document/lec/2013/Kumoh/KimTaehyeong/1.pdf · c 언어의 많은 부분과 연관성을 가짐 본

연산자

정수 연산자

%: 나머지

/: 정수/정수 정수

• 실수/정수, 정수/실수, 실수/실수 실수

증감연산자

연산자 연산 예 변수(a)값 식의값 결합성

++a printf(“%d”, ++a) 1증가 증가된 a값

a++ printf(“%d”, a++) 1증가 증가전 a값

--a printf(“%d”, --a) 1감소 감소된 a값

a-- printf(“%d”, a--) 1감소 감소전 a값

Page 13: C 언어 포인터 정복하기 - elearning.kocw.netelearning.kocw.net/contents4/document/lec/2013/Kumoh/KimTaehyeong/1.pdf · c 언어의 많은 부분과 연관성을 가짐 본

반복문

while (반복조건식)

반복문장

do

반복문장

while (반복조건식)

for (최초실행식; 반복조건식; 최종실행식)

반복문장

break 문, continue 문

Page 14: C 언어 포인터 정복하기 - elearning.kocw.netelearning.kocw.net/contents4/document/lec/2013/Kumoh/KimTaehyeong/1.pdf · c 언어의 많은 부분과 연관성을 가짐 본

조건문

if (실행조건식)

실행문1

[else

실행문2]

switch (정수식) {

case 정수값1:

실행문1

default:

실행문n

}

break 문 사용

Page 15: C 언어 포인터 정복하기 - elearning.kocw.netelearning.kocw.net/contents4/document/lec/2013/Kumoh/KimTaehyeong/1.pdf · c 언어의 많은 부분과 연관성을 가짐 본

함수 (1)

C의 구조적 프로그래밍 단위: 모듈(module)

main()도 함수이다.

함수는 다른 함수를 호출할 수 있다.

호출관계 ≠ 계층관계

모든 함수는 동일한 레벨이다

C 표준 라이브러리 함수

printf(), scanf() 이미 “정의”되어 제공되는 함수

헤더파일(.h), 라이브러리(.lib) 파일

15

Page 16: C 언어 포인터 정복하기 - elearning.kocw.netelearning.kocw.net/contents4/document/lec/2013/Kumoh/KimTaehyeong/1.pdf · c 언어의 많은 부분과 연관성을 가짐 본

함수 (2)

형식

16

return-type function_name (parameter type list)

{

declarations

statements

}

함수 수행이 끝난 후 반환(Return)

되는 값의 자료형(data type) 함수에 전달되는

인자(argument)의 수와 자료형

함수 몸체 (Function body)

함수 헤더 (Function Header)

Page 17: C 언어 포인터 정복하기 - elearning.kocw.netelearning.kocw.net/contents4/document/lec/2013/Kumoh/KimTaehyeong/1.pdf · c 언어의 많은 부분과 연관성을 가짐 본

함수 (3)

함수 원형(prototype) 함수를 호출(사용)하기 위해서는 함수 호출 이전에

(위에서) 함수가 선언되어 있어야 함 • 변수 사용 이전에 선언이 필요한 것과 마찬가지

함수의 선언을 위해 필요한 것: 함수 헤더 정보 • 함수 이름

• 각 인자의 자료형 (없을 경우 void)

• 반환값의 자료형 (없을 경우 void)

Top-down 방식은 함수의 정의가 호출 뒤에 오므로 미리 함수를 선언(원형 정보)해 주어야 함

기본 라이브러리 함수는 선언을 위해 헤더파일 필요

17

Page 18: C 언어 포인터 정복하기 - elearning.kocw.netelearning.kocw.net/contents4/document/lec/2013/Kumoh/KimTaehyeong/1.pdf · c 언어의 많은 부분과 연관성을 가짐 본

함수 (4)

함수의 인자

함수 내의 지역 변수와 동일

함수의 지역변수는 함수가 반환될 때 해제됨

함수의 인자호출 방법

Call by value

• 인자에 값이 복사된다 내부에서만 이용

Call by reference

• 인자에 포인터(함수 외부 메모리)가 복사된다

• 함수 밖의 메모리(변수) 값을 변경할 수 있다

18

Page 19: C 언어 포인터 정복하기 - elearning.kocw.netelearning.kocw.net/contents4/document/lec/2013/Kumoh/KimTaehyeong/1.pdf · c 언어의 많은 부분과 연관성을 가짐 본

다음 강의 소개

2강. 배열로 시작하기

배열 개념 이해하기

배열 사용법 익히기

배열을 함수로 전달하기

기본 배열 확장하기

확장된 배열 다루기

19