• 검색 결과가 없습니다.

o^ ‰t † ¾ Ó á Ԗ ÐÕ ªA b ç ” ¸à Ô

N/A
N/A
Protected

Academic year: 2021

Share "o^ ‰t † ¾ Ó á Ԗ ÐÕ ªA b ç ” ¸à Ô"

Copied!
8
0
0

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

전체 글

(1)

Ì



o^ ‰t † ¾ Ó á Ԗ ÐÕ ªA b ç ” ¸à Ô

†

<

Êà º Ÿ í“  '  (Function Pointer)

y

©

œ@ /l 

2007¸   10 Z 4 10{ 9 

V

 1 ⠉ Ç a ˜ + ' ‘ ×ß 

†

<

Êú Ÿí“'\¦ †<Êú\¦ ovH Ÿí“'s.

†

<

Êú Ÿí“'\¦ &ñ_ H ~½ÓZO“Ér {9ìÍ Ÿøí“'\¦ &ñ_ H ~½Ód”õ q5pw .

\

V\¦ [þt€ xH &ñúH 6£§õ °ú s &ñ_ôÇ.

int x;

&

ñ

ú\¦ ovH Ÿí“' px“r É6£§õ °ú s &ñ_ôÇ.

int *px;

s

2£§ ·ú¡\ *ëߖ ·¡­%63£§`¦ ·ú˜ ú e”.

†

<

ÊúH #QbG> ‚ƒ|¨c? Õª|  –Ð †<Êú_ "é¶+þA(prototype)s. 7£¤ †<Êú

Ÿ

í“'\¦ ‚ƒ H ~½ÓZO“Ér H‘:r&hܼ–Ð †<Êú_ "é¶+þA(prototype)`¦ ‚ƒ H ~½Ó Z

O

õ 1lx{9 . ë–, †ß <Êú_ "é¶+þA\"f †<Êú s2£§ ÂÒìr ·ú¡\ *\¦ ·¡­s€ )a.

\

V\¦ [þt€ 6£§s &ñú\¦ ìøÍ¨8Š H †<Êú_ "é¶+A ‚þƒ{9 âĺ, int f(); // ³ÉíªÁ

Õ

ª †<Êú_ Ÿí“'H 6£§õ °ú s ‚ƒbC#a TÒ» ¿ l. ÕªX<, ÕªXOt ·ú§



.

int *pf(); // ­ÍòªÁ¬Ç ²¼¬Ýᱸ¦Ûå ¨Éá³Òá³´£Ûá ³ÉíªÁ

$

כ “Ér †<Êú Ÿí“' m &ñú_ Ÿí“'\¦ ìøÍ¨8Š H †<Êú ‚ƒs. s X

O

> )a sÄ»H Ÿí“'\¦ 0AôÇ ?/6 x ‚ÃЛ¸ ƒíߖ“ ‘*’ †ÊÃ<º  ñئ`¦ 0AôÇ ‘()’

ƒ



íߖ˜Ð ƒíߖ ĺ‚ íH0A ±úl M:ëHs. KÕþ˜“Ér 6£§õ °ú s F‹c ñ Óü l

 ƒíߖ“ ‘()’–Ð Ÿí“' ƒíߖü< ú"î`¦ ÑütQ"f Ÿí“' ƒíߖs €$ ƒ





÷&•¸2Ÿ¤ H כ s.

#Œl\ ¸H ?/6 r "Éîr&h¼–Ð Ér X<"f 4RM®o¦ ƒ/åÇ ÂÒìr`¦ ]Ç —¸ŽH ?/6 x\

@

Ç —¸ŽH ݶoH „&h¼–Ð y©œ@/l\> e”_þvm.

(2)

int (*pf)(); // ­ÍòªÁ¦Ûå ¨Éá³Òá³´£Ûá ³ÉíªÁ¬Ç ²¼¬Ýᱸ

s

QôÇ ~½Ód”“Ér qÄ» € u 2+3*4H d”\"f 3*4 €$ >íߖ÷&#Q 12 ÷&“¦ Õª 6£§\ 2 8K4R 14 ÷&H כ õ q5pw . ƒíߖ ĺ‚ íH0A\

"

f * +˜Ð Z}l M:ëHs. "f 2+3s €$ >íߖ÷&> 9€ (2+3)*4





H d”ܼ–Ð F‹c ñ–Ð Ó#üQ1> H כ s.



6£§“Ér †<Êúü< Õª †<Êú\ @/ôÇ †<Êú Ÿí“'_ &ñ__ \Vs.

• double func(); −→ double (*pfunc)();

• float func(int, long); −→ float (*pfunc)(int, long);

• double *func(int, long); −→ double *(*pfunc)(int, long);

• int *func(char *); −→ int *(*pfunc)(char *);

V

 2 ⠉ ¡ õ  · ' ‘ ×ß 

†

<

Êú Ÿí“'H H‘:r&hܼ–Ð 6£§õ °ú s  ñئôÇ.

(*fp)(); // ­ÍòªÁ¦Ûå ¨Éá³Òá³´£Ûá ³ÉíªÁ¬Ç ²¼¬Ýᱸ¦Ûå ¬È¬Õò³µª¸ ¡Æ ³ÉíªÁ¦Ûå ³¼כÖå

†

<

Êú Ÿí“'H †ÊÃ<º_ Ÿí“'sÙ¼–Ð †ÊÃ<º_ Åҙè°úכ`¦ @/{9K ôÇ. sXO

>

 †<Êú Ÿí“'\¦ œílo½+É M:H H‘:r&hܼ–Ð 6£§õ °ú s ôÇ.

int func() {

return 0;

}

int main() {

int (*fp1)() = &func;

(*fp1)(); // ³ÉíªÁ ²¼¬Ýᱸ¦¼ ³ÉíªÁ ³¼כÖå // ¥¼£Ûá

int (*fp2)();

fp2 = &func;

(*fp2)(); // ³ÉíªÁ ²¼¬Ýᱸ¦¼ ³ÉíªÁ ³¼כÖå }

s

\ @/ôÇ çߖéߖôÇ \V\¦ [þt#Q˜Ð. s°úכ 3.14\ †<Êú JQp'(„²ú˜“)

–

Ð ~ÃΓÉr &ñú\¦ YLK"f ìøÍ¨8Š H †<Êú_ Ÿí“'\¦ 6 x H \Vs.

#include <iostream>

using namespace std;

(3)

double piX(int);

int main() {

double (*pp)(int) = NULL;

pp = &piX; // pp = piX; ¬½ ¤Ñò¬Ýå int x = 2;

cout << "The result with " << x << " is " << (*pp)(2) << ".\n";

return 0;

}

double piX(int x) {

cout << "We multiply pi with " << x << ".\n";

return 3.14*(double)x;

}

†

<

Êú Ÿí“'–Ð pp\¦ ‚ƒÙþ¡“¦ NULL–Ð {9éߖ œíloÙþ¡. ¢¸ôÇ pp = &piX;–Ð piX †<Êú_ Åҙè–Ð @/{9Ùþ¡. ÕªX<, †ÊÃ<º_ Åҙè @/’ 6§õ£ °ú s †<Êú ^‰

–

Ð @/{9K•¸ )a. s\ @/ôÇ H_7H “§F_ 412 Aá¤_ NOTE\ “:r.

pp = piX; // pp = &piX; ¬½ ¤Ñò¬Ýå³´¤´.

s

\¦ 8 sK l 0AK 6£§_ áԖÐÕªÏþ›`¦ ˜Ð•¸2Ÿ¤ .

#include <iostream>

using namespace std;

int add(int a, int b) {

return a+b;

}

int main() {

cout << "add(1,2) = " << add(1,2) << endl;

int (*fp)(int,int);

fp= &add; // fp = add ¬½ ¤Ñò¬Ýå

cout << "(*fp)(2,3) = " << (*fp)(2,3) << endl; // fp(2,3) ¡½ ¤Ñò¬Ýå cout << "fp = "<< fp << endl;

cout << "(&fp) = "<< (&fp) << endl;

cout << "(*fp) = " << (*fp) << endl;

cout << "add = " << add << endl;

(4)

cout << "(&add) = " << (&add) << endl;

cout << "(*add) = " << (*add) << endl;

} s

 áԖÐÕªÏþ›`¦ z´'Ÿ € 6£§õ °ú “Ér õ\¦ ·p.

add(1,2) = 3 (*fp)(2,3) = 5 fp = 004110CD (&fp) = 0012FF40 (*fp) = 004110CD add = 004110CD (&add) = 004110CD (*add) = 004110CD

˜

Ð1pws, éߖíHy †<Êú“ add\ @/K"fH &add *add  °ú “Ér õ(004110CD)

\



¦ ÍÇr`¦ ·ú˜ ú e”. "f fp = addü< fp = &addH 1lx{9 .

Õ

ªX< z´'Ÿ õ\¦ ˜Ð€, fp ü< (*fp)_ °כ•ú¸ 1lx{9†<Ê`¦ ·ú˜ ú e”. "f, 0

A_ âĺ, fp(2,3) õ (*fp)(2,3)•¸ °ú “Ér õ\¦ ?/H כ s.

#

Q‹" כ `¦ jþttH yŒ•_ ¼#_\  € ÷&x’. €9_ âĺ, fp = &add ü

< (*fp)(2,3) °ú “Ér 7á§ 8 %3ôÇ ~½Ód”`¦ ‚ ñôÇ.

V

 3 ⠉  £  U d

†

<

Êú Ÿí“'\ @/ôÇ Ér \V–Ð, “§F_ \V\"f 4R“:r 6£§ \V\¦ ˜Ð•¸2Ÿ¤ .

#include <iostream>

using namespace std;

double p1(int);

double p2(int);

// ¤Á ¨Í᮵ ­Íá¤Éå¬Ýá­´£Ûá int³Ïò¬Ûå ­Íá¤Éå¬Ýá­´¦¼ כij´£Ûá // double³Ïò ³ÉíªÁ¦Ûå ­ÈªÈ³´£Ûá ²¼¬Ýᱸ¬È¤´

void estimate(int, double (*)(int));

int main() {

cout << "Enter LOC: ";

int code;

cin >> code;

cout << "Estimated time for P1:\n";

estimate(code, &p1);

cout << "Estimated time for P2:\n";

estimate(code, &p2);

(5)

return 0;

}

double p1(int lns) {

return 0.05 * lns;

}

double p2(int lns) {

return 0.03 * lns + 0.0004 * lns * lns;

}

void estimate(int lines, double (*pf)(int)) {

cout << "For " << lines << " lines, "

"it takes " << (*pf)(lines) << " time.\n";

}

#

Œl"f estimateH &ñú(int)ü< †<Êú Ÿí“'\¦ ~Ã΍H †<Êús. estimateH void–Ð Áº כ •¸ ìøÍ¨8Š t ·ú§H. estimate ¿º P: “–Ð ~΍ÃH †<Êú Ÿí“ '

H &ñú °úכ`¦ ~ÃÎ"f double`¦ ìøÍ¨8Š H †<Êú_ Ÿí“'s.

†

<

Êú Ÿí“'\¦ †<Êú_ „²ú˜ “–Ð 6 x #Œ 4Ÿ¤¸úšôÇ switchëH`¦ @/’ H

\

V\¦ ·ú˜˜Ð’x. gË:ƒíߖ`¦ H áԖÐÕªÏþ›Ü¼–Ð ĺ‚ 6§õ£ °ú “Ér áԖÐÕªÏþ›

`



¦ ˜Ð•¸2Ÿ¤ .

#include <iostream>

using namespace std;

float plus(float a, float b) { return a+b; } float minus(float a, float b) { return a-b; } float multiply(float a, float b) { return a*b; } float divide(float a, float b) { return a/b; } void operate(float a, float b, char opCode) {

float result = 0;

// execute operation switch(opCode) {

case ’+’ : result = plus(a,b); break;

case ’-’ : result = minus(a,b); break;

case ’*’ : result = multiply(a,b); break;

case ’/’ : result = divide(a,b); break;

}

cout << result << endl; // display result

(6)

}

int main() {

operate(2, 5, ’+’);

} 0

A_ switch ëH“Ér †<Êú Ÿí“'\¦ 6 x € 6£§õ °ú s Ÿ÷¶.

#include <iostream>

using namespace std;

float plus(float a, float b) { return a+b; } float minus(float a, float b) { return a-b; } float multiply(float a, float b) { return a*b; } float divide(float a, float b) { return a/b; }

void operate(float a, float b, float (*op)(float,float)) {

// ²Ýå­´£Ûá (*op)(a,b)¦Ûå ¤¸ ªÍá³¼³´­È§Éá

// ¬º¡ÈªÍá op(a,b)¤¼ ¡´£Ûò³Éí¬Ûå ¨¼¬È¡È ¬Ä³µ £Íø¬¸¨Ñí float result = op(a,b);

cout << result << endl; // display result }

int main() {

// ²Ýå­´£Ûá &plus ¦Ûå ¤¸ ªÍá³¼³´­È§Éá

// ¬º¡ÈªÍá plus ¤¼ ¡´£Ûò³Éí¬Ûå ¨¼¬È¡È ¬Ä³µ £Íø¬¸¨Ñí operate(2, 5, plus);

}

float (*op)(float,float)\¦ K$3K ˜Ð. {9éߖ opH ú ?/t ©œÃº e”



. ƒíߖ ĺ‚ íH0A\ _K (*op) €$ ½+Ë÷&Ù¼–Ð, s opH H‘:r&hܼ–Ð Ÿí

“



' úe”`¦ ·ú˜ ú e”. Õª 6§ †£<Êú  ñئ`¦  ?/H (float, float) ½+Ë

÷

&Ù¼–Ð, opH float ü< float ¿º>h_ “\¦ tH †<Êú_ Ÿí“' ú“ כ s



. t}Œ•ܼ–Ð p ·±ú¡_ float ½+Ë÷&Ù¼–Ð, opH float °úכ`¦ ìøÍ¨8Š H float ü<

float ¿º>h_ “\¦ tH †<Êú_ Ÿí“' ús.

V

 4 ⠉ ¡  ´O ± ÕB  ™ ×l Ð M  % K V ž æ ·

Ÿ

í“' ÕªQ 1pw, †ÊÃ<º Ÿí“' Ÿí“' Ér †<Êú Ÿí“'[þtõ ½+Ë÷&€ {

©

œ©œ ˜Ðl'p ©œ{©œy 4Ÿ¤¸úš > ˜Ð{ Ã9º e”. „ëH[tsþ ùߖ C C++ áԖÐÕªÏþ› [

þ

t`¦ ˜Ð€ 6£§õ ° sú 7á§ 4Ÿ¤¸úšôÇ â啸 z´]j e”`¦ ú e”. ÕªQ H‘:r&hܼ

–

Ð Ÿí“' †<Êú Ÿí“' ‚ƒ÷&H ~½ÓZO`¦ sK “¦ H H ]XH €  s

K½+É Ãº e”H ?/6 xs.

(7)

\

V\¦ [þt#Q †<Êú Ÿí“'_ C\P`¦ ‚ƒ H ~½ÓZO`¦ ˜Ð.

double (*pf[3])(double, double) K

$3K ˜Ð€, {9éߖ pfH ú ?/t ©œÃº e”H X<, C\`P¦  ?/H []s

Ÿ

í“'_ *˜Ð ĺ‚íH0A Z}ܼټ–Ð pf[3]H [j >h_ "鶙è\¦ ” C\Pe”`¦ ·ú˜ Ã

º e”. Õª 6£§\H *s ·¡­#Q"f *pf[3] ÷&Ù¼–Ð, Ÿí“'_ C\Ps )a. Õª  6

£

§ (double, double)s ·¡­#Q"f *pf[3](double, double)“Ér double, double\¦ †<Êú

“



–Ð tH †<Êú Ÿí“'_ C\Ps. t}Œ•ܼ–Ð ±p ·ú¡_ doubles ·¡­#Q, „

^

‰H double`¦ ìøÍ¨8Š  9 double, double\¦ †<Êú “–Ð tH †<Êú Ÿí“'_ C

\P“ כ s.



6£§“Ér †<Êú_ "é¶+þAõ Õª\ ©œ6£x H †<Êú Ÿí“' ‚ƒs.

1. void operate(float, float, float (*)(float,float)) −→ void (*pOperate)(float, float, float (*)(float,float))

2. int (*func())() −→ int (*(*pFunc)())()

1 \VH ·ú¡\"f ŽH operate †<Êú“ void operate(float a, float b, float (*op)(float,float))_

"

é

¶+þAõ Õª "é¶+þA\"f Ä»AôÇ †<Êú Ÿí“'s. ĺoH float (*op)(float,float)  float °úכ`¦ ìøÍ¨8Š H float ü< float ¿º>h_ “\¦ tH †<Êú_ Ÿí“' ú_

‚



ƒsêøÍ כ `¦ ·ú˜“¦ e”. pOperateH Áº כ •¸ ìøÍ¨8Š t ·ú§Ü¼ 9, float, float Õ

ªo“¦ “float °úכ`¦ ìøÍ¨8Š H float ü< float ¿º>h_ “\¦ tH †<Êú_ Ÿí“ '

 +þA”`¦ [j >h_ “–Ð tH †<Êú_ Ÿí“'“ כ s.



™è 4Ÿ¤¸úšK ˜ÐsH 2  \VH &ñú\¦ ìͨø8Š H †<Êú_ Ÿí“'\¦ ìøÍ¨8Š H

†

<

Êú“ func_ "é¶+Aõþ Õª func\ @/ôÇ †<Êú Ÿí“'s. s\ @/ôÇ áԖÐÕªÏþ› \V

\



¦ ˜Ð•¸2Ÿ¤ .

#include <iostream>

using namespace std;

int (*func())(); // function int (*(*pFunc)())(); // pointer int hello()

{

cout << "Hello\n";

return 1;

}

int (*func())() { return &hello; } int main()

{

cout << ((*func)())() << endl;

pFunc=&func;

cout << ((*(*pFunc))())() << endl;

(8)

return 0;

}

int (*func())(); \¦ K$3K ˜Ð. {9éߖ funcH ú ?/t ©œÃº e”. Ÿí

“



' çߖ]X ‚ÃЛ¸ ƒíߖ“ *ü< †<Êú  ñئ`¦  ?/H () ƒíߖ ׿ () ĺ‚ íH 0

A 8 ß¼Ù¼–Ð, func() €$ ½+˝)a. "f H‘:r&hܼ–Ð funcH †<Êús.

Õ

ª 6£§ *s ½+Ë÷&#Q *func() ÷&Ù¼–Ð, funcH †ÊÃ<ºH †<Êú“X<, ‘Ÿí“'\¦ 

¨ 8

Š H †<Êú’ )a. Õª 6£§ (*func())–Ð „^‰ F‹c ñ–Ð ÑütQ#Œ”. Õªo“¦



"f r †<Êú  ñئ`¦  ?/H () ·¡­#Q"f (*func())() ÷&Ù¼–Ð , funcH †<Ê Ã

º_ Ÿí“'\¦ ìøÍ¨Š 8H †<Êú“X<, :£¤Zy> „²ú˜~Ã΍H JQp'(“)[þt“Ér \O.



t}Œ•ܼ–Ð ±p ·ú¡_ int ·¡­#Q"f, int (*func())() „^‰H ÇaÊÁG±ê£· ð5».É ”§ ê>



ÐM á!ÐM ÁþÊÁ˜+  ïê>'aŸ· ð5».É ÐM ÁþÊÁ )a.

· ú

¡_ כ `¦ sKÙþ¡€, int (*(*pFunc)())(); _ âĺH ~1. int (*func())();

\

"f func\¦ (*pFunc)–Ð õH כ \ Ô¦õ l M:ëHs. 7£¤ pFuncH Ÿí“'“ X

<, ÇaÊÁG±ê£· ð5»É .”§ ê>ÐM á!ÐM ÁÊþÁ˜+  ïê>'aŸ· ð5»É .ÐM ÁþÊÁ˜+  ïê>'a

“



 כ s.

7 á

§ 8 ÙütôÇ \V–Ð ‘p×±¼ÀÓ ÿnmy’_ ‘C †<Ê&ñõ z´Ãº’\ š¸H 6£§_ \V\¦

˜

Ð. (‘±p×¼ÀÓ ÿnmy’_ ‘C †Ê&<ñõ z´Ãº’H ‚ÃГ¦ ëH‰³ 3lq2Ÿ¤\ eܔ¼ 9 „ëH&h“ C áԖÐÕªA Q ÷&“¦ H |ÃГÉr ìøÍ×¼r {91lqK ½+É Õþ˜[þt ׿ s.) int main()

{

(*(void(*)())0)();

} 0

Aü< °ú “Ér ï×¼ z´]j–Ð (Ž {9)aH z´s ZtÖ¦t•¸ —¸ØÔ’xtëߖ, z´ ]

j Áº \Q \Os (Ž {9)a. Óüt:r z´'Ÿ`¦ € \Q ±ú˜ כ s. 0A_ ï×¼

 (Ž {9s )aH z´“Ér ëHZO&Üh¼–Ð ëH]j \OH כ s. õƒ 0A_ ï×¼





H #Q‹" _p“?

{ 9

éߖ (*(void(*)())0)();\"f *, (), ; ¢¸H void°ú “Ér \V€•#Q  כ “Ér 0 ÷r s

. ÕªQÙ¼–Ð ĺoH 0 Ò' K$3`¦ rŒ•K ½+É כ s. ĺ‚ 0H Õª ·ú¡\ (void(*)())s e”. sXO> Õüw ·ú¡\ ()s š¸H âĺH 6£§õ °ú “Ér sáÔ H Û

¼hA(type casting) 7£¤ +þA y©œ]j_ âĺs.

int x = (int) 3.2;

7

£

¤ 0s :£¤&ñ +þAܼ–Ð ¨8Š÷&H כ s. Õª ¨8Š÷&H +þA“Ér 0 ·ú¡\ e”H (void(*)())_ F

‹

c ñ îߖ_ void(*)() s. void(*)()H Áºכ •¸ ìøÍ¨8Š t ·ú§H †<Êú_ Ÿí“' +

þ

Ae”`¦ ·ú˜ ú e”. "f (void(*)())0 “Ér 0`¦ Áºכ •¸ ìøÍ¨8Š t ·ú§H †<Êú_

Ÿ

í“'–Ð sáÔ HÛ¼hAôÇ כ s. s âĺ 0s †<Êú Ÿí“' )a כ sÙ¼–Ð, 0 t\ [þt#Qe”H ÅҙèH Õª †<Êú_ rŒ• t ÷&H כ s.

s

]j (*(void(*)())0)(); \"f (void(*)())0 \¦ fp –Ð @/uK ˜Ð.

(*fp)(); // fp £Ûá (void(*)())0 s

כ “Ér †<Êú Ÿí“' fp  ovH †<Êú\¦  ñئ H כ s.

#

Œlt sKÙþ¡€, s]j „ÂÒ sK ÷&%3`¦ כ s. õ&hܼ–Ð (*(void(*)())0)();





H 0 t\ [þt#Qe”H Åҙè\¦ †<Êú_ rŒ• t–Ð Œ™"f  ñئ H ("é¶A_ _

•

¸H &háÔ H) " î§îëHs.

참조

관련 문서

-1396년 오스만 터키제국의 술탄 Bayezid I세는 불가리아 북부 다뉴브 강의 도시 Nikopo에서 십자군과의 전쟁인 Battle of Nicopolis에서 승리하여 불가리아를

Development of Bulgaria Граждани за европейско развитие на България.. Rosen Asenov Plevneliev

동 기한내 위반사항이 개선되지 않는 경우「사회적기업 육성법」제18조의 규정에 따라 사회적기업 인증이 취소될 수 있음을 알려드립니다... 동

‚ÓÁÏÓÊÌÓÒÚË ‰Îfl ÒÓÓÚ˜ÂÒÚ‚ÂÌÌËÍÓ‚, ÍÓÚÓ˚ ÔËÂÁʇ˛Ú ‚ äÓ². MINISTRY OF JUSTICE

 ?&gt;  $B C;9 F  ‡! ²A žÀ CCCCCCCCCCCCCCCCCCCCCC .  ;&lt;: $@

 &gt;MN d#  d#t f fT ;u FFFFFFFFFFFFFFFF .  &gt;MN d#  d#t f fT ;u B*A

 ´²  I]‚ ‡K  L˜ BBBBBBBBBBBBBBBBBBBBBBBB C.  ´², 0e

따라서,최근에 전문 인력의 부족 및 생산단가를 낮추기 위한 방안으로 용접공정 을 줄이고 관련부품을 일체형으로 제작하여 생산단가 및 작업의 효율성을