PowerPoint Presentation

Similar documents
금오공대 컴퓨터공학전공 강의자료

PowerPoint Template

PowerPoint 프레젠테이션

설계란 무엇인가?

Microsoft PowerPoint - chap06-2pointer.ppt

Data Structure

11장 포인터

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

제 14 장포인터활용 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다.

Microsoft PowerPoint - ch07 - 포인터 pm0415

슬라이드 1

PowerPoint 프레젠테이션

PowerPoint Presentation

학습목차 2.1 다차원배열이란 차원배열의주소와값의참조

Microsoft PowerPoint - chap06-5 [호환 모드]

Microsoft PowerPoint - chap06-1Array.ppt

금오공대 컴퓨터공학전공 강의자료

PowerPoint 프레젠테이션

쉽게 풀어쓴 C 프로그래밍

목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2

Microsoft PowerPoint - 제11장 포인터(강의)

Microsoft PowerPoint - additional01.ppt [호환 모드]

설계란 무엇인가?

1 장 C 언어복습 표준입출력배열포인터배열과포인터함수 const와포인터구조체컴파일러사용방법 C++ 프로그래밍입문

PowerPoint 프레젠테이션

윤성우의 열혈 TCP/IP 소켓 프로그래밍

Microsoft PowerPoint - C프로그래밍-chap03.ppt [호환 모드]

02장.배열과 클래스

A Dynamic Grid Services Deployment Mechanism for On-Demand Resource Provisioning

KNK_C_05_Pointers_Arrays_structures_summary_v02

Microsoft PowerPoint - chap10-함수의활용.pptx

Microsoft PowerPoint - C++ 5 .pptx

OCW_C언어 기초

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

PowerPoint Presentation

Microsoft PowerPoint - 제11장 포인터

임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과

Microsoft PowerPoint - 03_(C_Programming)_(Korean)_Pointers

Microsoft PowerPoint - chap-11.pptx

Microsoft PowerPoint - chap11-포인터의활용.pptx

untitled

ch15

Microsoft PowerPoint - chap04-연산자.pptx

<4D F736F F F696E74202D20C1A63134C0E520C6F7C0CEC5CD5FC8B0BFEB>

Microsoft PowerPoint - 7장 배열 pptx

09 배열

Microsoft PowerPoint - chap03-변수와데이터형.pptx

3. 1 포인터란 3. 2 포인터변수의선언과사용 3. 3 다차원포인터변수의선언과사용 3. 4 주소의가감산 3. 5 함수포인터

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

제 11 장포인터 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다.

Microsoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100

Microsoft PowerPoint - ch07 - 포인터 pm0415

PowerPoint Presentation

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

JAVA PROGRAMMING 실습 08.다형성

< 고급 C 프로그래밍및실습 > 11 장구조체실습문제 문제에대한안내 - 특별한언급이없으면문제의조건에맞지않는입력은입력되지않는다고가정하라. - 특별한언급이없으면, 각줄의맨앞과맨뒤에는공백을출력하지않는다. - 출력예시에서 는각줄의맨앞과맨뒤에출력되는공백을의미한다. - 입출력예시

Microsoft Word - FunctionCall

17장 클래스와 메소드

PowerPoint Template

Microsoft PowerPoint - chap-03.pptx

A Hierarchical Approach to Interactive Motion Editing for Human-like Figures

PowerPoint Presentation

C++ Programming

구조체정의 자료형 (data types) 기본자료형 (primitive data types) : char, int, float 등과같이 C 언어에서제공하는자료형. 사용자정의자료형 (user-defined data types) : 다양한자료형을묶어서목적에따라새로운자료형을

11장 포인터

프로그래밍개론및실습 2015 년 2 학기프로그래밍개론및실습과목으로본내용은강의교재인생능출판사, 두근두근 C 언어수업, 천인국지음을발췌수정하였음

슬라이드 1

PowerPoint Template

Microsoft PowerPoint - Chapter_08.pptx

Python과 함께 배우는 신호 해석 제 5 강. 복소수 연산 및 Python을 이용한 복소수 연산 (제 2 장. 복소수 기초)

Microsoft PowerPoint - Lesson2.pptx

JAVA PROGRAMMING 실습 02. 표준 입출력

1. 객체의생성과대입 int 형변수 : 선언과동시에초기화하는방법 (C++) int a = 3; int a(3); // 기본타입역시클래스와같이처리가능 객체의생성 ( 복습 ) class CPoint private : int x, y; public : CPoint(int a

쉽게 풀어쓴 C 프로그래밍

Data Structure

강의 개요

쉽게 풀어쓴 C 프로그래밍

PowerPoint Presentation

Slide 1

C 언어 프로그래밊 과제 풀이

Microsoft PowerPoint - Chapter8.pptx

Lab 3. 실습문제 (Single linked list)_해답.hwp

프로그램의실행화면 주석 (comment) 두수의합 : 300 /* 두개의숫자의합을계산하는프로그램 */ 주석은코드를설명하는글입니다. 주석 3 가지방법의주석 주석의예 /* 한줄로된주석 */ /* 저자 : 홍길동날짜 : 2013.

PowerPoint Presentation

Microsoft PowerPoint - C_9장 포인터 pptx

Microsoft PowerPoint - 05장(함수) [호환 모드]

학습목표 함수프로시저, 서브프로시저의의미를안다. 매개변수전달방식을학습한다. 함수를이용한프로그래밍한다. 2

<4D F736F F F696E74202D20C1A633C0E52043C7C1B7CEB1D7B7A5B1B8BCBABFE4BCD2>

PowerPoint 프레젠테이션

C 프로그래밊 개요

이번장에서학습할내용 동적메모리란? malloc() 와 calloc() 연결리스트 파일을이용하면보다많은데이터를유용하고지속적으로사용및관리할수있습니다. 2

Microsoft PowerPoint 세션.ppt

Microsoft PowerPoint - chap05-제어문.pptx

4 장클래스와객체 클래스와객체 public과 private 구조체와클래스객체의생성과생성자객체의소멸과소멸자생성자와소멸자의호출순서디폴트생성자와디폴트소멸자멤버초기화멤버함수의외부정의멤버함수의인라인함수선언 C++ 프로그래밍입문

중간고사

PowerPoint Template

1. auto_ptr 다음프로그램의문제점은무엇인가? void func(void) int *p = new int; cout << " 양수입력 : "; cin >> *p; if (*p <= 0) cout << " 양수를입력해야합니다 " << endl; return; 동적할

Microsoft PowerPoint 자바-기본문법(Ch2).pptx

PowerPoint 프레젠테이션

Transcription:

컴퓨터프로그래밍 Computer Programming

14 함수와포인터활용

목차 1. 함수의인자전달방식 2. 포인터전달과반환 3. 함수포인터와 void 포인터 컴퓨터프로그래밍 (Computer Programming) - 12 변수유효범위 3

1. 함수의인자전달방식

함수에서값의전달 C 언어는함수의인자전달방식 기본적으로값에의한호출 call by value 방식 함수호출시실인자의값이형식인자에복사되어저장된다는의미 함수 increase(int origin, int increment) origin+= increment; 를수행하는간단한함수 함수호출시변수 amount 의값 10이매개변수인 origin 에복사되고, 20이매개변수인 increment 에복사 함수 increase() 내부실행 매개변수인 origin 값이 30으로증가 변수 amount 와매개변수 origin 은아무관련성이없음 origin 은증가해도 amount 의값은변하지않음 함수외부의변수를함수내부에서수정할수없는특징

함수에서값의전달

Source Code #01: callbyvalue.c 일반매개변수로실인자값을수정불가능 함수 increase() 첫번째매개변수를 int * 로수정 함수구현도 *origin += increment; 로수정하여구현 함수호출시첫번째인자가 &amount 이므로변수 amount 의주소값이매개변수인 origin 에복사 20 이매개변수인 increment 에복사 함수 increase() 내부실행 *origin 은변수 amount 자체를의미 *origin 을증가시키면 amount 의값도증가 main() 내부에서 amount 의값이 30 으로증가 컴퓨터프로그래밍 (Computer Programming) - 12 변수유효범위 7

참조에의한호출call by reference 포인터를매개변수로사용하면함수로전달된실인자의주소를이용하여그변수를참조가능 함수에서주소의호출 컴퓨터프로그래밍 (Computer Programming) - 12 변수유효범위 8

Source Code #02: callbyreference.c 매개변수가포인터이면실인자의값수정가능 컴퓨터프로그래밍 (Computer Programming) - 12 변수유효범위 9

배열이름으로전달 함수의매개변수로배열을전달하는것 배열의첫원소를참조매개변수로전달하는것과동일 배열을매개변수로하는함수 sum() 을구현 실수형배열의모든원소의합을구하여반환하는함수 함수 sum() 의형식매개변수는실수형배열과배열크기 첫번째형식매개변수에서배열자체에배열크기를기술하는것은아무의미가없음 double ary[5] 보다는 double ary[] 라고기술하는것을권장 실제로함수내부에서실인자로전달된배열의배열크기를알수없음 배열크기를두번째인자로사용 매개변수를 double ary[] 처럼기술해도단순히 double *ary 처럼포인터변수로인식 컴퓨터프로그래밍 (Computer Programming) - 12 변수유효범위 10

배열이름으로전달 컴퓨터프로그래밍 (Computer Programming) - 12 변수유효범위 11

배열크기로인자로사용 만일배열크기를인자로사용하지않는다면정해진상수를함수정의내부에서사용해야함 이런방법은배열크기가변하면소스를수정해야하므로비효율적 배열크기에관계없이배열원소의합을구하는함수를만들려면배열크기도하나의인자로사용 컴퓨터프로그래밍 (Computer Programming) - 12 변수유효범위 12

배열크기로인자로사용 컴퓨터프로그래밍 (Computer Programming) - 12 변수유효범위 13

Source Code #03: arrayparameter.c 함수 sum() 을구현하고이용 함수정의가구현되면함수원형을선언한뒤함수호출이가능 함수원형에서매개변수는배열이름생략가능 double[] 와같이기술가능 함수호출에서배열인자에는반드시배열이름으로 sum(data, 5) 로기술 컴퓨터프로그래밍 (Computer Programming) - 12 변수유효범위 14

다양한배열원소참조방법 배열 point 에서간접연산자를사용한배열원소의접근방법은 *(point + i) 배열의합을구하려면 sum += *(point + i); 문장을반복 문장 int *address = point; 배열 point 를가리키는포인터변수 address 를선언하여 point 를저장 문장 sum += *(address++) 으로도배열의합가능 배열이름 point 는주소상수 sum += *(point++) 는사용불가능 증가연산식 point++ 의피연산자로상수인 point 를사용할수없기때문 컴퓨터프로그래밍 (Computer Programming) - 12 변수유효범위 15

다양한배열원소참조방법 컴퓨터프로그래밍 (Computer Programming) - 12 변수유효범위 16

함수헤더에배열을인자로기술하는다양한방법 함수헤더에 int ary[] 로기술하는것은 int *ary 로도대체가능 컴퓨터프로그래밍 (Computer Programming) - 12 변수유효범위 17

Source Code #04: arrayparam.c 변수 ary 는포인터변수로서주소값을저장하는변수 증가연산자의이용이가능 연산식 *ary++s 는 *(ary++) 와같은의미 후위증가연산자 (ary++) 의우선순위가가장높기때문에 컴퓨터프로그래밍 (Computer Programming) - 12 변수유효범위 18

배열크기계산방법 배열이함수인자인경우, 대부분배열크기도함수인자로하는경우가일반적 배열크기 : ( sizeof( 배열이름 ) / sizeof( 배열원소 ) ) 컴퓨터프로그래밍 (Computer Programming) - 12 변수유효범위 19

Source Code #05: arrayfunction.c 컴퓨터프로그래밍 (Computer Programming) - 12 변수유효범위 20

다차원배열전달 이차원배열을함수인자로이용하는방법 이차원배열에서모든원소의합을구하는함수를구현 다차원배열을인자로이용하는경우 첫번째대괄호내부의크기를제외한다른모든크기는반드시기술 이차원배열의행의수를인자로이용하면보다일반화된함수를구현가능 함수 sum() 이차원배열값을모두더하는함수 함수 printarray() 는인자인이차원배열값을모두출력하는함수 컴퓨터프로그래밍 (Computer Programming) - 12 변수유효범위 21

다차원배열전달 컴퓨터프로그래밍 (Computer Programming) - 12 변수유효범위 22

이차원배열행과열 함수 sum() 을호출하려면배열이름과함께행과열의수가필요 이차원배열의행의수 : ( sizeof(x) / sizeof( x[0] ) ) 이차원배열의열의수 : ( sizeof(x[0]) / sizeof( x[0][0]) ) sizeof(x) 는배열전체의바이트수, sizeof(x[0]) 는 1행의바이트수 sizeof(x[0][0]) 은첫번째원소의바이트수 컴퓨터프로그래밍 (Computer Programming) - 12 변수유효범위 23

이차원배열행과열 컴퓨터프로그래밍 (Computer Programming) - 12 변수유효범위 24

Source Code #06: twoarrayfunction.c 컴퓨터프로그래밍 (Computer Programming) - 12 변수유효범위 25

가변인자가있는함수머리 함수 printf() 함수원형 첫인자는 char *_Format 을제외하고는이후에 표시 함수 printf() 를호출하는경우를살펴보면 출력할인자의수와자료형이결정되지않은체함수를호출 출력할인자의수와자료형은인자 _Format 에 %d 컴퓨터프로그래밍 (Computer Programming) - 12 변수유효범위 26

가변인자variable argument 함수에서인자의수와자료형이결정되지않은함수인자방식 처음또는앞부분의매개변수는정해져있으나 이후매개변수수와각각의자료형이고정적이지않고변하는인자 매개변수에서중간이후부터마지막에위치한가변인자만가능 함수정의시가변인자의매개변수는 으로기술 컴퓨터프로그래밍 (Computer Programming) - 12 변수유효범위 27

가변인자variable argument 함수 vatest 의함수헤드 void vatest(int n, ) 가변인자인 의앞부분에는반드시매개변수가 int n처럼고정적이어야함 가변인자... 시작전이전고정매개변수 가변인자를처리하는데필요한정보를지정하는데사용 컴퓨터프로그래밍 (Computer Programming) - 12 변수유효범위 28

가변인자가있는함수구현 함수에서가변인자를구현과정 필요매크로함수와자료형을위해헤더파일 stdarg.h 가필요 가변인자선언 : 마치변수선언처럼가변인자로처리할변수를하나만드는일 가변인자처리시작 : 선언된변수에서마지막고정인자를지정해가변인자의시작위치를알리는방법 가변인자얻기 : 가변인자각각의자료형을지정하여가변인자를반환받는절차매크로함수 va_arg() 의호출로반환된인자로원하는연산을처리 가변인자처리종료 : 가변인자에대한처리를끝내는단계 컴퓨터프로그래밍 (Computer Programming) - 12 변수유효범위 29

가변인자가있는함수구현 컴퓨터프로그래밍 (Computer Programming) - 12 변수유효범위 30

가변인자가있는함수구현 가변인자처리절차와가변인자가있는함수 sum(int numargs, ) 가변인자앞의첫고정인자인 numargs 는가변인자의수 int 형인가변인자를처리하여그결과를반환하는함수 가변인자... 시작전첫고정매개변수 이후의가변인자를처리하는데필요한정보를지정하는데사용 컴퓨터프로그래밍 (Computer Programming) - 12 변수유효범위 31

가변인자가있는함수구현 컴퓨터프로그래밍 (Computer Programming) - 12 변수유효범위 32

Source Code #07: vararg.c 가변인자를처리하는함수 avg(int count, ) 를구현 함수 avg() 의마지막고정인자인 count 는가변인자의수 double 형인가변인자를모두더한후평균을반환하는함수 컴퓨터프로그래밍 (Computer Programming) - 12 변수유효범위 33

Lab #01: 함수에서배열활용 함수에서인자로배열을사용하면배열은무조건참조에의한호출 함수에서배열의내용을수정하더라도그내용이원래의배열에그대로반영 함수 aryprocess() 는인자로사용된배열의내부원소를모두 1 증가시키는함수 일차원배열에서배열의크기 결과 ( 배열전체바이트수 )/( 배열원소바이트수 ) 2 4 6 8 10 컴퓨터프로그래밍 (Computer Programming) - 12 변수유효범위 34

2. 포인터전달과반환

매개변수와반환으로포인터사용 주소연산자 & 함수에서매개변수를포인터로이용하면결국참조에의한호출 함수원형 void add(int *, int, int); 에서첫매개변수가포인터인 int * 함수 add() 는두번째와세번째인자를합해첫번째인자가가리키는변수에저장함수 변수인 sum을선언하여주소값인 &sum 을인자로호출

Source Code #08: pointerparam.c 함수의결과를포인터로반환하는예 함수원형을 int * add(int *, int, int) 로하는함수 add() 반환값이포인터인 int * 두수의합을첫번째인자가가리키는변수에저장한후포인터인첫번째인자를그대로반환 add() 를 *add(&sum, m, n) 호출 변수 sum 에합 a+b 가저장 반환값인포인터가가리키는변수인 sum 을바로참조 컴퓨터프로그래밍 (Computer Programming) - 12 변수유효범위 37

주소값반환 컴퓨터프로그래밍 (Computer Programming) - 12 변수유효범위 38

Source Code #09: ptrreturn.c 함수 multiply() 인자인두수의곱을지역변수인 mult 에저장한후 &mult 로포인터를반환 지역변수는함수가종료되는시점에메모리에서제거되는변수 지역변수주소값의반환은문제를발생시킬수있음 제거될지역변수의주소값은반환하지않는것이바람직 컴퓨터프로그래밍 (Computer Programming) - 12 변수유효범위 39

상수를위한 const 사용 포인터를매개변수로이용하면수정된결과를받을수있어편리 이러한포인터인자의잘못된수정을미리예방하는방법 즉수정을원하지않는함수의인자앞에키워드 const 를삽입하여참조되는변수가수정될수없게함 키워드 const 는인자인포인터변수가가리키는내용을수정불가능 인자를 const double *a 와 const double *b 로기술 *a와 *b를대입연산자의 l-value 로사용불가능 즉 *a와 *b를이용하여그내용을수정불가능 상수키워드 const 의위치는자료형앞이나포인터변수 *a 앞에도가능 const double *a와 double const *a 는동일한표현 컴퓨터프로그래밍 (Computer Programming) - 12 변수유효범위 40

상수를위한 const 사용 컴퓨터프로그래밍 (Computer Programming) - 12 변수유효범위 41

Source Code #10: constreference.c 함수 devideandincrement(double *result, double *a, double *b) 포인터인자가모두 const 가아니므로그인자가가리키는변수의내용을모두수정가능 *a 와 *b 를나누어그결과를 *result 에저장한후 *a 와 *b 를각각 1 씩증가시키는함수 컴퓨터프로그래밍 (Computer Programming) - 12 변수유효범위 42

복소수를위한구조체 구조체 complex 실수부와허수부를나타내는 real 과 img 를멤버로구성 컴퓨터프로그래밍 (Computer Programming) - 12 변수유효범위 43

복소수를위한구조체 복소수complex number 실수의개념을확장한수로 a + bi로표현 여기서 a 와 b 는실수이며, i 는허수단위로 i2 = -1 을만족 a 는실수부, b 는허수부 복소수에서의사칙연산 컴퓨터프로그래밍 (Computer Programming) - 12 변수유효범위 44

인자와반환형으로구조체사용 함수 paircomplex1() 인자인복소수의켤레복소수 pair complex number 를구하여반환하는함수 복소수 (a + bi) 의켤레복소수는 (a - bi) 구조체는함수의인자와반환값으로이용이가능 다음함수는구조체인자를값에의한호출 call by value 방식으로이용 함수에서구조체지역변수 com 을하나만들어실인자의구조체값을모두복사하는방식으로구조체값을전달받음 컴퓨터프로그래밍 (Computer Programming) - 12 변수유효범위 45

인자와반환형으로구조체사용 컴퓨터프로그래밍 (Computer Programming) - 12 변수유효범위 46

인자와반환형으로구조체사용 이함수를참조에의한호출 call by reference 방식으로수정 paircomplex2() 는인자를주소값으로저장 실인자의변수 comp의값을직접수정하는방식 이함수를호출하기위해서는 &pcomp 처럼주소값을이용해호출 컴퓨터프로그래밍 (Computer Programming) - 12 변수유효범위 47

인자와반환형으로구조체사용 컴퓨터프로그래밍 (Computer Programming) - 12 변수유효범위 48

Source Code #11: complexnumber.c 구조체를함수의인자로사용하는방식은다른변수와같이값에의한호출과참조에의한호출방식을사용가능 구조체가크기가매우큰구조체를값에의한호출의인자로사용한다면매개변수의메모리할당과값의복사에많은시간이소요 이에반해주소값을사용하는참조에의한호출방식은메모리할당과값의복사에드는시간이없는장점 컴퓨터프로그래밍 (Computer Programming) - 12 변수유효범위 49

Lab #02: 책정보를표현하는구조체전달 구조체 struct book 책이름과저자, 책번호 (ISB: 국제표준도서번호 International Standard Book Number) 표현 참조에의한호출로출력하는함수를구현 구조체 struct book 을자료형 book 으로정의 함수 print() 는인자가 (book *b) 으로구조체를포인터로받아책정보를출력 결과 제목 : 절대자바, 저자 : 강환수, ISBN: 123987 제목 : 파이썬웹프로그래밍, 저자 : 김석훈, ISBN: 2398765 컴퓨터프로그래밍 (Computer Programming) - 12 변수유효범위 50

3. 함수포인터와 void 포인터

함수포인터 함수주소저장변수 포인터의장점은다른변수를참조하여읽거나쓰는것도가능 함수포인터 하나의함수이름으로필요에따라여러함수를사용하면편리 함수포인터 pfun 은함수 add() 와 mult() 그리고 subt() 로도사용가능

함수포인터 함수포인터pointer to function 함수의주소값을저장하는포인터변수 즉함수포인터는함수를가리키는포인터 반환형, 인자목록의수와각각의자료형이일치하는함수의주소를저장할수있는변수 함수포인터선언 함수원형에서함수이름을제외한반환형과인자목록의정보가필요 컴퓨터프로그래밍 (Computer Programming) - 12 변수유효범위 53

함수포인터 컴퓨터프로그래밍 (Computer Programming) - 12 변수유효범위 54

함수포인터 변수이름이 pf인함수포인터를하나선언 함수포인터 pf는함수 add() 의주소를저장가능 함수원형이 void add(double*, double, double); 인함수의주소를저장 함수원형에서반환형인 void 와인자목록인 (double *, double, double) 정보필요 여기서주의할점 (*pf) 와같이변수이름인 pf 앞에는 * 이있어야하며반드시괄호를사용 만일괄호가없으면함수원형 pf는함수포인터변수가아니라 void * 를반환하는함수이름 컴퓨터프로그래밍 (Computer Programming) - 12 변수유효범위 55

함수포인터 물론위함수포인터변수 pf 함수 add() 만을가리킬수있는것이아니라 add() 와반환형과인자목록이같은함수는모두가리킬수있음 subtract() 의반환형과인자목록이 add() 와동일하다면 pf 는함수 subtract() 도가리킬수있음 문장 pf = subtract; 와같이함수포인터에는괄호가없이함수이름만으로대입 함수이름 add 나 subtract 는주소연산자를함께사용하여 &add 나 &subtract 로도사용가능 subtract() 와 add() 와같이함수호출로대입해서는오류가발생 컴퓨터프로그래밍 (Computer Programming) - 12 변수유효범위 56

함수포인터를이용한함수호출 다음예제에서함수 add() 의구현 함수 add() 에서 x + y의결과를반환하지않고포인터변수 z에저장 인자를포인터변수로사용하면함수내부에서수정한값이그대로실인자로반영 문장 pf = add; 함수포인터변수인 pf에함수 add() 의주소값이저장 변수 pf를이용하여 add() 함수를호출가능 포인터변수 pf 를이용한함수 add() 의호출방법은 add() 호출과동일 즉 pf(&result, m, n); 로 add(&result, m, n) 호출을대체 이문장이실행되면변수 result 에는 m + n의결과가저장 함수 add() 에서 m + n이반영된변수 result 를사용 pf(&result, m, n) 은 (*pf)(&result, m, n) 로도가능 컴퓨터프로그래밍 (Computer Programming) - 12 변수유효범위 57

함수포인터를이용한함수호출 컴퓨터프로그래밍 (Computer Programming) - 12 변수유효범위 58

Source Code #12: funcptr.c 컴퓨터프로그래밍 (Computer Programming) - 12 변수유효범위 59

함수포인터배열array of function pointer 원소로여러개의함수포인터를선언하는함수포인터배열 크기가 3인함수포인터배열 pfunary 는문장 int (*pfunary[3])(int, int); 으로선언 배열 pfunary 의각원소가가리키는함수 반환값이 int이고인자목록이 (int, int) 컴퓨터프로그래밍 (Computer Programming) - 12 변수유효범위 60

함수포인터배열array of function pointer 컴퓨터프로그래밍 (Computer Programming) - 12 변수유효범위 61

함수포인터배열선언 함수포인터배열선언구문 배열 fpary 의각원소가가리키는함수 반환값이 void 이고인자목록이 (double*, double, double) 컴퓨터프로그래밍 (Computer Programming) - 12 변수유효범위 62

함수포인터배열선언 함수포인터배열선언구문 배열 fpary 을선언한이후에함수 4 개를각각의배열원소에저장 배열 fpary 을선언하면서함수 4 개의주소값을초기화하는문장 컴퓨터프로그래밍 (Computer Programming) - 12 변수유효범위 63

Source Code #13: fptrary.c 컴퓨터프로그래밍 (Computer Programming) - 12 변수유효범위 64

void 포인터 void 포인터개념 포인터는주소값을저장하는변수 int *, double * 처럼가리키는대상의구체적인자료형포인터로사용이일반적 주소값이란참조를시작하는주소에불과 자료형을알아야참조할범위와내용을해석할방법을알수있음 void 포인터 (void *) 는무엇일까? void 포인터는자료형을무시하고주소값만을다루는포인터 대상에상관없이모든자료형의주소를저장할수있는만능포인터로사용가능 void 포인터에는일반포인터는물론배열과구조체심지어함수주소도저장가능 컴퓨터프로그래밍 (Computer Programming) - 12 변수유효범위 65

void 포인터 컴퓨터프로그래밍 (Computer Programming) - 12 변수유효범위 66

Source Code #14: voidptrbasic.c 다양한자료형의포인터를저장하는 void 포인터 컴퓨터프로그래밍 (Computer Programming) - 12 변수유효범위 67

void 포인터활용 void 포인터는모든주소를저장가능 가리키는변수를참조하거나수정이불가능 주소값으로변수를참조하려면결국자료형으로참조범위를알아야하는데 void 포인터는이러한정보가전혀없이주소만을담는변수에불과하기때문 void 포인터는자료형정보는없이임시로주소만을저장하는포인터 그러므로실제 void 포인터로변수를참조하기위해서는자료형변환이필요 컴퓨터프로그래밍 (Computer Programming) - 12 변수유효범위 68

void 포인터활용 컴퓨터프로그래밍 (Computer Programming) - 12 변수유효범위 69

Source Code #15: voidptr.c void 포인터로다양한자료의참조 컴퓨터프로그래밍 (Computer Programming) - 12 변수유효범위 70

Lab #03: 함수포인터배열의활용 배열크기가 3 인함수포인터배열을선언 각각더하기와빼기, 그리고곱하기를수행하는함수를각각저장 연산을수행하는방법과순서를나타내는문자열 "*+-" 를저장하여문자열순서대로곱하기, 더하기, 빼기를수행하는프로그램을작성 연산의피연산자는 3 과 5 로고정하여다음과같은결과로수행 * 결과 : 15 + 결과 : 8 - 결과 : -2 컴퓨터프로그래밍 (Computer Programming) - 12 변수유효범위 71

컴퓨터프로그래밍 (Computer Programming) - 12 변수유효범위 72