• 검색 결과가 없습니다.

LAB #8 함수 포인터와 동적 메모리 할당

N/A
N/A
Protected

Academic year: 2022

Share "LAB #8 함수 포인터와 동적 메모리 할당"

Copied!
24
0
0

로드 중.... (전체 텍스트 보기)

전체 글

(1)

2016년2학기 고급컴퓨터프로그래밍및실습 (36342-02)

LAB #8 함수 포인터와

동적 메모리 할당

1

(2)

(복습1) 함수 포인터

 다음 프로그램은 함수 포인터 fp 를 정의하고, 이를 사용하여 sum( )을 호 출하는 예제이다. 이 프로그램을 이해하시오.

2

fp는 함수 포인터이다. 이는 (int, int) 를 파라미터로 받고, int 를

리턴하는 함수들을 가리킬 수 있다.

(3)

(복습2) 함수 포인터

 함수 포인터 fp 를 사용하여 sum( ) 과 prod( ) 를 호출하는 예제. 실행시켜 보시오.

3

(4)

(실습1) 함수를 가리키는 함수 포인터

 실수 2개를 입력으로 받아서, 덧셈을 한 후 그 결과값을 리턴하는 함수 dsum( )을 정의하시오. 뺄셈, 곱셈, 나눗셈에 대해서도 각각 ddiff( ),

dmult( ), ddiv( )를 정의하시오. main( ) 에서는 이들을 가리킬 수 있는 함수 포인터 fmighty를 정의하고, 이 포인터를 사용하여 정의된 함수들을 한 번 씩 호출해 보도록 하시오. 즉 main( ) 에는 다음 문장 4개가 포함되어야 한 다.

4

(5)

(실습2) 함수 포인터를 파라미터로 갖는 함수 (1/3)

 다음 프로그램에는 실수 2개가 주어졌을 때, 최소값, 최대값, 합계, 평균을 구하는 함수 min( ), max( ), sum( ), avg( ) 가 포함되어 있다.

5

(6)

(실습2) 함수 포인터를 파라미터로 갖는 함수 (2/3)

6

(7)

(실습2) 함수 포인터를 파라미터로 갖는 함수 (3/3)

 main( ) 에서는 min( ), max( ), sum( ), avg( ) 함수를 직접 호출하지 않고 compute( ) 함수를 통해 이들을 호출한다. compute( ) 함수는 함수명 또는 함수 포인터와 그 함수의 파라미터들을 전달받아, 전달받은 함수가 할 일을 대행해 준다.

 예를 들어, compute( min, x, y) 는 min(x, y)를 계산해 주고, compute(max, x, y)는 max(x, y)를 계산해 준다. 이러한 역할을 하는 compute( ) 함수를 완 성하여 이 프로그램에 추가해 보시오. (Lab8 – prog2 - 이걸 쓰세요.txt) 파 일을 복사하여 작업해 보시오.

7

(8)

(복습2) void * 예제

 다음 프로그램을 실행시켜 보시오.

8

void 형 포인터로 받아서 정수형 포인터로 변환하여 사용

정수형 포인터를 보냄

(9)

(복습2) void * 예제

 다음 프로그램을 실행시켜 보시오.

9

void 형 포인터로 받아서 더블형 포인터로 변환하여 사용

더블형 포인터를 보냄

(10)

(실습3) void * 형 파라미터

 두 수를 더하여 출력하는 add( ) 함수를 정의하려고 한다. add( ) 함수는 정 수값을 더하기도 하고, 실수값을 더하기도 한다. add( )의 세번째 파라미터 가 1이면 정수 덧셈을 하고, 2이면 실수 덧셈을 하도록 add( ) 함수를 정의 해 보시오.

10

(11)

(실습4) 두 수의 비교 함수

 파라미터로 전달되는 두 정수를 비교하여, 앞의 수가 작으면 음수를 반환하 고, 뒤의 수가 작으면 양수를 반환하고, 같으면 0을 반환하는

CompareInt( ) 함수를 작성하시오. 함수 파라미터는 void * 형으로 하시오.

11

이 함수를 정의하시오.

(12)

(복습4) qsort( )로 정수배열 정렬하기

12

qsort( ) 를 사용하기 위해서는

원소 비교 함수만 정의해 주면 된다.

다음 프로그램을 실행시켜 보시오.

ACPL Lab11 - review4.txt

(13)

(복습4) qsort 로 정수배열 정렬하기

13

두 수가 같으면 0, 앞의 수가 크면 양수,

뒤의 수가 크면 음수를 반환함

(14)

(복습5) qsort 로 내림차순 정렬하기

14

qsort( ) 한테 크기에

대해 반대의 결과를

주면 된다.

(15)

(실습5) 더블형 배열의 오름차순 정렬

 main( ) 이 다음과 같이 정의되어 있다고 하자. qsort( ) 가 배열 A[ ]를 오름 차순으로 정렬하도록 12~13쪽에 있는 (복습4)의 프로그램을 수정해 보시 오.

15

(16)

(실습6) 더블형 배열의 내림차순 정렬

 (실습 5)의 프로그램을 수정하여, 이번에는 A[ ]가 내림차순으로 정렬되도 록 해 보시오.

16

(17)

(실습7) 문자 배열의 오름차순 정렬

 main( ) 이 다음과 같이 정의되어 있다고 하자. qsort( ) 가 배열 A[ ]에 들어 있는 문자들을 오름차순으로 정렬하도록 (복습4)의 프로그램을 수정하시오.

17

(18)

(복습6) 동적메모리  정수배열

 다음 프로그램을 이해해 보고 실행시켜 봅시다. 결과는?

18

p

(19)

(실습8) 동적메모리  실수 배열

 (복습6)의 프로그램을 수정하여 10개의 더블형 숫자들을 저장할 수 있는 배 열 B[ ]를 동적으로 할당 받아보시오. 배열 B[ ]에 적당한 실수값을 저장하 고, 모두 출력해 보시오.

19

(20)

(실습9) 동적메모리  문자 배열

 (복습6)의 프로그램을 수정하여 문자 20개를 저장할 수 있는

배열 Name[ ]를 동적으로 할당 받아보시오. 배열 Name[ ]에 자신의 이름을 저장하고, 그 이름을 출력해 보시오.

20

(21)

(실습10) 동적 메모리  구조체

 프로그램이 다음과 같이 시작한다고 하자. point 형 구조체 하나를 저장할 수 있는 공간을 할당 받고, 이를 p 가 가리키도록 한다. p 가 가리키는 구조 체에 적당한 좌표를 저장한 후 그대로 출력해 보시오.

21

(22)

(실습11) 동적 2차원 배열 – 행단위 할당

 정수 포인터 배열 p[5]를 선언하시오. 그리고 원소를 7개씩 갖는 1차원 배 열들을 동적으로 할당 받아 아래 그림과 같이 연결 시키시오. 그렇게 한 후, 이 2차원 배열의 모든 원소를 화면에 출력해 보시오.

22

p[0]

p[1]

p[2]

p[3]

p[4]

malloc( 정수 7개 ) malloc( 정수 7개 ) malloc( 정수 7개 ) malloc( 정수 7개 ) malloc( 정수 7개 )

(23)

(실습12) 동적 2차원 배열 – 배열 전체 한꺼번에 할당

 정수 포인터 배열 p[5]를 선언하시오. 그리고 원소를 35개 갖는 1차원 배열 을 동적으로 할당 받아 아래 그림과 같이 연결 시키시오. 그렇게 한 후, 이 2차원 배열의 모든 원소를 화면에 출력해 보시오.

23

p[0]

p[1]

p[2]

p[3]

p[4]

malloc( 정수 35개 )

(24)

(실습13) 동적 2차원 배열 –

배열 포인터 사용

 “7개의 원소를 갖는 1차원 배열”을 가리킬 수 있는 포인터 p를 선언하시오.

35개의 정수를 저장할 수 있는 배열을 (실습12)와 같이 malloc( )으로 할당 받은 후, p가 그 배열을 가리키도록 하시오. p를 5x7 2차원 배열의 이름 (또 는 포인터로 가정하고), p를 사용하여 그 배열에 값을 채운 후 모두 출력해 보시오.

24

p

malloc( 정수 35개 )

힌트: int (*p)[7];

참조

관련 문서

Lab., Hanyang Univ.. Lab., Hanyang Univ.. Lab., Hanyang Univ.. Lab., Hanyang Univ.. Lab., Hanyang Univ.. Lab., Hanyang Univ.. Lab., Hanyang Univ.. Lab., Hanyang Univ..

③ 함수 > 프로그래밍 > 숫자형 팔레트에서 곱하기 함수를 블록 다이어그램에 두고 화씨온도 터미널과 반복 터미널을 입력으로 연결하고 이 함수의 춗력을 C_F

 다음은 객체를 생성하고 동적메모리를 객 체에 할당하며 할당된 메모리를 지우는 프

 문자(char)를 데이터 타입으로 하는 스택 S가 주어져 있을 때 스택 내부의 문자를 순서대로 출력하는 함수 를 작성하고 테스트 해라. 이함수는 스택에 정의된 push,

„ 정의: 단사 함수이고 동시에 전사 함수인 함수를. 전단사 함수(one-to-one correspondence

– 예: 함수 spfilt는 예제 2.9의 기하 평균 필터를 imfilter와 MATLAB의 log 함수와 exp 함수를 사용해서 구현. • 이게 가능할 때, 성능은 항상 훨씬 빠르고, 메모리

프로세스들은 시간 할당량 동안 CPU를 할당 받아 실행되는데, 이 시 간 동안 실행을 종료하지 못하면 운영체제에 의해 준비 상태로 쫓겨 나고, 준비 큐의 다음 프로세스가

– N번째 데이터에 도달하려면 앞에서부터 찾아야 한다. – 링크가