PowerPoint 프레젠테이션

Download Report

Transcript PowerPoint 프레젠테이션

New C Programming with a workbook
Chapter 9 포인터 정복하기
함수 포인터
 함수 포인터
 함수의 주소를 가리키는 포인터
 함수 포인터를 사용하는 이유
 매개변수로서 사용
/* 포인터 */
포인터
포인터 배열
포인터 함수
함수 포인터
 함수 포인터의 선언 형식
자료형 *함수이름(함수 인자들)
 함수 포인터의 선언 방식
/* 함수 포인터를 선언 한 것 */
int (*function)(int, int);
/* 포인터를 반환하는 함수의 원형을 선언한 것 */
int *function(int, int);
// 함수의 시작주소를 가짐
//함수의 리턴값에 대한 주소를 가짐
 함수 포인터를 이용한 함수 호출 제어 예제 실습
 [교재 264page] 코드 9-1 참조
2 /11
함수 포인터 예
result[] // 배열
*result[] // 포인터 배열(각 배열 요소가 포인터 변수)
-이 포인터 변수가 void(int, int) 함수의 시작주소 값을 가짐
-배열명이 배열 시작주소인 것처럼 함수명도 함수의 시작주소임
-따라서, 포인터 배열 result[0]은 plus 함수의 시작주소를 가짐
3 /11
키워드 const
 키워드 const
 constant의 약자로서 상수를 의미
 상수
⇒ 프로그램상에서 변경 불가
⇒ 만약에 변경하려 한다면 컴파일 오류가 발생
 변수를 상수처럼 사용 가능
 프로그래머가 잘못하여 변경시킬 수 있는 변수들에 const 키워드를
사용하여 변수를 변경하지 못하게 함
 const 키워드를 사용하는 형식
const 자료형 변수명 = 값;
4 /11
키워드 const
전처리기, 컴파일과정
.c
.obj
 매크로 상수
 const 키워드와 같은 목적으로 사용
 const 키워드를 사용하는 변수와 다르게 자료형이 없음
#define 매크로명 값
 매크로 상수와 const 상수의 차이
 매크로 상수 : 컴파일하기 이전에 전처리기에 의해 처리
 const 상수 : 컴파일에 의해 변수가 만들어짐
 const상수와 매크로 상수를 사용하는 예
[매크로 상수]
#define PI 3.141592
[const 키워드]
const double pi = 3.141592;
5 /11
main() 함수의 인자로 사용하는 포인터
 매개변수를 갖는 main() 함수의 예
#include <stdio.h>
int main(int argc, char *argv[])
{
…
return 0;
}
 argc
⇒ 프로그램 이름
⇒ 명령어의 라인 수를 카운트
 argv
⇒ 포인터 배열
⇒ 명령어 라인 인수의 첫 글자 주소 값
6 /11
main() 함수의 인자로 사용하는 포인터
 main()의 인자들
7 /11
main() 함수의 인자로 사용하는 포인터
 명령어 라인에서 받은 모든 인수를 출력하는 예제 실습
 [교재 269page] 코드 9-3 참조
⇒ 실행 프로그램 이름이나 모든 인수들이 문자열
⇒ 명령어 라인에서 숫자 입력 → 문자열로 처리
 명령어 라인에서 인수들을 수치 데이터의 의미로 프로그램 내부
에 전달 → main() 함수 내부에서 이를 적절하게 변환해야 함
 변환처리는 C 언어의 표준 라이브러리 함수 이용
8 /11
main() 함수의 인자로 사용하는 포인터
 가장 많이 사용되는 변환 함수
int atoi(char *str);
double atof(char *str);
long atol(char *str);
// 수치데이터 문자열을 정수형 데이터로 변환
// 수치데이터 문자열을 double 형 데이터로 변환
// 수치데이터 문자열을 long 형 데이터로 변환
 stdlib.h 헤더 파일에 정의
 명령어 라인에서 수치데이터 입력 예제 실습
 [교재 270page] 코드 9-4 참조
9 /11
포인터를 사용하는 자료구조
 스택(Stack)
 임시 메모리 영역에 해당, 메모리 사용방식의 한 가지
 사용
⇒ 자동 변수를 저장하거나 함수로 인수를 보낼 때
⇒ 복귀 번지를 저장할 때 등
 후입선출(LIFO: Last In First Out) 방식
⇒ “나중에 입력된 데이터가 먼저 나온다”
 동작 과정
⇒ 푸시(push)와 팝(pop)의 과정으로 이루어짐
⇒ 동작이 한쪽 끝(top)에서만 일어남
⇒ 자료가 들어가는 입구와 나오는 출구가 하나
⇒ 맨 마지막에 들어간 것이 제일 먼저 나오게 되는 것
 스택을 구현하여 후입선출을 보여주는 예제 실습
 [교재 272~273page] 코드 9-5 참조
10 /11
포인터를 사용하는 자료구조
 힙(Heap)
 임시 메모리 영역, 메모리 사용 방식의 한 가지
 선입선출(FIFO: First In First Out) 방식
⇒ “먼저 입력된 데이터가 먼저 나온다”
 프로그램들이 요구하는 블록의 크기나 요구/횟수 순서가 일정한 규
칙이 없음
 연결 리스트나 트리, 그래프 등의 동적인 자료구조를 만드는데 꼭
필요한 자료구조
 garbage collection
⇒ 자신에게 할당된 힙을 관리
⇒ 더는 사용되지 않는 블록들을 사용 가능한 상태로 만듬
⇒ 힙 내의 사용 가능한 공간을 인지함으로써 사용되지 않은 작은 조각들
이 낭비되지 않도록 하는 것
11 /11