๐ŸŽฎ GAME & DEV/ํ”„๋กœ๊ทธ๋ž˜๋ฐ

ํฌ์ธํ„ฐ ์„ ์–ธ ๋ฐฉ๋ฒ•

Blue Sky! 2008. 6. 9. 14:18

1. char *cities[10];

=> ํฌ์ธํ„ฐ ๋ฐฐ์—ด(ํฌ์ธํ„ฐ๊ฐ€ ๋ฐฐ์—ด ํ˜•ํƒœ๋กœ 10๊ฐœ๊ฐ€ ์žกํž˜)


2. char (*cities)[10];

=> ๋ฐฐ์—ด ํฌ์ธํ„ฐ ( Xํ–‰ 10์—ด์งœ๋ฆฌ ๋ฐฐ์—ด์„ ๊ฐ€๋ฆฌํ‚ฌ ์ˆ˜ ์žˆ๋Š” ๋ฐฐ์—ด ํฌ์ธํ„ฐ)


3. char *(cities[10]);

=> 1๋ฒˆ๊ณผ ๋™์ผ([ ] ๊ฐ€ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋” ๋†’์Œ)


4. char *(cities)[10];

=> 1๋ฒˆ๊ณผ ๋™์ผ


5.double (*lines[5])[2];

=> Xํ–‰ 2์—ด์งœ๋ฆฌ ๋ฐฐ์—ด์„ ๊ฐ€๋ฆฌํ‚ฌ ์ˆ˜ ์žˆ๋Š” ํฌ์ธํ„ฐ๊ฐ€ ๋ฐฐ์—ด๋กœ ์กด์žฌ(5๊ฐœ์˜ ํฌ์ธํ„ฐ ๋ฐฐ์—ด)


6. double (*arr)[5][2];

=> X๋ฉด 5ํ–‰ 2์—ด์„ ๊ฐ€๋ฆฌํ‚ฌ ์ˆ˜ ์žˆ๋Š” ๋ฐฐ์—ด ํฌ์ธํ„ฐ


7. char *city = "Busan";

=> "Busan" ์ด๋ผ๋Š” ๋ฌธ์ž์—ด์˜ ์‹œ์ž‘์ฃผ์†Œ์ธ 'B' ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ ๋ณ€์ˆ˜


8. const char *city = "busan";

=> city ๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋Œ€์ƒ์ฒด๋Š” ์ƒ์ˆ˜(์ˆ˜์ •๋ถˆ๊ฐ€)...์ฆ‰,,,ํฌ์ธํ„ฐ ์ƒ์ˆ˜


9. char *const city = "Busan";

=> city ๋Š” ๋‹ค๋ฅธ ๋Œ€์ƒ์ฒด๋ฅผ ๊ฐ€๋ฆฌ ํ‚ฌ ์ˆ˜ ์—†์Šด...์ฆ‰,,,์ƒ์ˆ˜ ํฌ์ธํ„ฐ

=> ๊ทธ๋Ÿฌ๋‚˜,,,"Busan" ๋ฌธ์ž์—ด ์ž์ฒด๊ฐ€ ์ •์  ๋ฐ์ดํ„ฐ ์˜์—ญ์— ์กด์žฌํ•˜๋Š” read only ๋ฌธ์ž์—ด์ด๋ฏ€๋กœ

=> ๊ฒฐ๊ตญ์€,,,์ด ๋ฌธ์ž์—ด ์ž์ฒด๋„ ์ˆ˜์ •์ด ๋ถˆ๊ฐ€๋Šฅ...


10. const char *const city = "Busan";

=> city๊ฐ€ ๋‹ค๋ฅธ ์ฃผ์†Œ๊ฐ’์„ ๊ฐ€๋ฆฌํ‚ฌ ์ˆ˜๋„ ์—†๊ณ , city ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ณณ์˜ ๊ฐ’์„ ์ˆ˜์ •๋„ ํ•  ์ˆ˜ ์—†์Šด...

=>ํฌ์ธํ„ฐ ์ƒ์ˆ˜์ด๋ฉด์„œ, ์ƒ์ˆ˜ ํฌ์ธํ„ฐ

=> city ๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ณณ์€ ๋ฌธ์ž์—ด์˜ ์‹œ์ž‘์ฃผ์†Œ('B')


11. float *g(), (*h)();

=> g ๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์—†๊ณ , float * ํƒ€์ž…์„ ๋ฆฌํ„ดํ•˜๋Š” ํ•จ์ˆ˜

=> h ๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์—†๊ณ , float ํƒ€์ž…์„ ๋ฆฌํ„ดํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํ•จ์ˆ˜ ํฌ์ธํ„ฐ ๋ณ€์ˆ˜


12. void ex(int, double (*)(int));

=> ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ int ํƒ€์ž…๊ณผ double ํ˜•์„ ๋ฆฌํ„ดํ•˜๋ฉฐ int ํƒ€์ž…์„ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๊ฐ–๋Š” ํ•จ์ˆ˜๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํ•จ์ˆ˜ ํฌ์ธํ„ฐ

    ๋ณ€์ˆ˜๋ฅผ ์ทจํ•˜๋Š” ex ํ•จ์ˆ˜...ex ์˜ ๋ฆฌํ„ด๊ฐ’์€ ์—†์Šด.


13. void (*p)(float,float,float (*)(float,float);

=> ๋งค๊ฐœ๋ณ€์ˆ˜: float ํƒ€์ž…

                   float ํƒ€์ž…

                   float ํƒ€์ž…์„ ๋ฆฌํ„ดํ•˜๋ฉฐ, 2๊ฐœ์˜ float ํƒ€์ž…์„ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›๋Š” ํ•จ์ˆ˜๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํ•จ์ˆ˜ ํฌ์ธํ„ฐ ๋ณ€์ˆ˜

=> p ๋Š” ๋ฆฌํ„ด๊ฐ’์ด ์—†์Šด

=> ์ฆ‰,,,p๋Š” ํ•จ์ˆ˜ ํฌ์ธํ„ฐ ๋ณ€์ˆ˜


14. int (*(*p)())()

=> ์ž์‹ ์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ์—†๊ณ , int __( ) ํƒ€์ž…์˜ ํ•จ์ˆ˜๋ฅผ ๋ฆฌํ„ด ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ํ•จ์ˆ˜ ํฌ์ธํ„ฐ ๋ณ€์ˆ˜


15. int (*func[5])();

=>  int __( ) ํƒ€์ž…์˜ ํ•จ์ˆ˜๋ฅผ ๊ฐ€๋ฆฌํ‚ฌ ์ˆ˜ ์žˆ๋Š” ํ•จ์ˆ˜ ํฌ์ธํ„ฐ ๋ฐฐ์—ด


16. char * const * const p;

=> ์ด์ค‘ ํฌ์ธํ„ฐ p๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ์ผ์ฐจ์› ํฌ์ธํ„ฐ์˜ ์ฐธ์กฐ๊ฐ’๋งŒ ์ˆ˜์ •์ด ๊ฐ€๋Šฅ

=> ์ฆ‰,,,์ƒ์ˆ˜ ํฌ์ธํ„ฐ


17. const char * const * const p;

=> const ๋Š” ์ž์‹ ์˜ ์˜ค๋ฅธ์ชฝ ํ•ญ์„ ์ƒ์ˆ˜ํ™” ์‹œํ‚ด

=> p๋Š” ์ž์‹ ์ด ๊ฐ€๋ฆฌํ‚ค๋Š” ์ผ์ฐจ์› ํฌ์ธํ„ฐ์˜ ์ฃผ์†Œ๋งŒ์„ ๊ฐ€๋ฆฌํ‚ฌ ์ˆ˜ ์žˆ๊ณ ,

    ์ด ์ผ์ฐจ์› ํฌ์ธํ„ฐ๋„ ์ฒ˜์Œ์— ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ณณ ์™ธ์—๋Š” ๋‹ค๋ฅธ ์ฃผ์†Œ๊ฐ’์„ ๊ฐ€๋ฆฌํ‚ฌ ์ˆ˜ ์—†์Šด.


18. void *p = new(double (*)[3];

=> p ๋Š” Xํ–‰ 3์—ด์งœ๋ฆฌ double ํƒ€์ž…์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹น๋ฐ›์„ ์ˆ˜ ์—†์Šด...

=> p ๋Š” 1์ฐจ์›์œผ๋กœ๋งŒ ํ‘œํ˜„๋จ...


19. int atexit(void (*)(void));

=> void __( ) ํ˜•ํƒœ์˜ ํ•จ์ˆ˜๋ฅผ ๊ฐ€๋ฆฌํ‚ฌ ์ˆ˜ ์žˆ๋Š” ํ•จ์ˆ˜ ํฌ์ธํ„ฐ ๋ณ€์ˆ˜๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ทจํ•˜๊ณ , int ํƒ€์ž…์„ ๋ฆฌํ„ดํ•˜๋Š”

    ํ•จ์ˆ˜ atexit


20. void (*signal(int, void(*)(int))

=> ์ž˜๋ชป๋œ ํ•จ์ˆ˜ํƒ€์ž…์ž„...

=> signal ํ•จ์ˆ˜๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ int ํƒ€์ž…๊ณผ  void __(int) ํ˜•ํƒœ๋ฅผ ์ทจํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ๊ฐ€๋ฆฌํ‚ฌ ์ˆ˜ ์žˆ๋Š” ํ•จ์ˆ˜ ํฌ์ธํ„ฐ ๋ณ€์ˆ˜

    ๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๊ฐ–๊ณ  ์žˆ์ง€๋งŒ,,,์ด signal ํ•จ์ˆ˜์˜ ๋ฆฌํ„ด๋  ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜ ์„ ์–ธ์ด ์—†๋Š” ์ƒํƒœ์ž„...


=> ์˜ฌ๋ฐ”๋ฅธ ํ˜•ํƒœ:

์˜ˆ) void (*signal(int, void(*)(int)) ( );



๋‹ค์Œ์˜ ์„ค๋ช…์— ๋”ฐ๋ผ ํ•จ์ˆ˜ ์›ํ˜•์„ ์ž‘์„ฑํ•˜๋ผ


1. func1์ด๋ผ๋Š” ํ•จ์ˆ˜๋Š” ์ „๋‹ฌ์ธ์ž๋„ ์—†๊ณ , ๋ฆฌํ„ด ๊ฐ’๋„ ์—†๋‹ค.

=> void func1( );


2. func2๋ผ๋Š” ํ•จ์ˆ˜๋Š” double์ „๋‹ฌ ์ธ์ž๋ฅผ ํ•˜๋‚˜ ๋ฐ›์•„์„œ intํ˜•์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

=> int func2(double);


3. func3๋ผ๋Š” ํ•จ์ˆ˜๋Š” int ์ฐธ์กฐ๋ฅผ ์ „๋‹ฌ์ธ์ž๋กœ ๋ฐ›์•„์„œ char*๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค

=> char* func3(int& );


4. func4๋ผ๋Š” ํ•จ์ˆ˜๋Š” ์ฒซ๋ฒˆ์งธ ์ธ์ž๋กœ ๊ตฌ์กฐ์ฒด Arff์˜ ์ฐธ์กฐ, ๋‘ ๋ฒˆ์งธ ์ธ์ž๋กœ ๊ตฌ์กฐ์ฒด
Map์˜ ์ฐธ์กฐ, ์„ธ๋ฒˆ์งธ ์ธ์ž๋กœ int๋ฅผ ๋ฐ›์•„์„œ, ๊ตฌ์กฐ์ฒด Arffd์˜ ์ฐธ์กฐ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
func4๋Š” ์ฒซ๋ฒˆ์งธ ์ธ์ž์™€ ๋‘๋ฒˆ์งธ ์ธ์ž์˜ ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๋Š”๋‹ค.

=> Arffd& func4(const Arff&, const Map&, int);


5. func5๋ผ๋Š” ํ•จ์ˆ˜๋Š” ๋ฌธ์ž์—ด ์ „๋‹ฌ ์ธ์ž๋ฅผ ๋ฐ›์•„์„œ intํ˜•์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
๋‹จ func5ํ•จ์ˆ˜๋Š” ์ „๋‹ฌ๋ฐ›์€ ๋ฌธ์ž์—ด์„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๋Š”๋‹ค.

=> int func5(const char* );


6. func6๋ผ๋Š” ํ•จ์ˆ˜๋Š” ์œ„์˜ func4๋ผ๋Š” ํ•จ์ˆ˜์˜ ํฌ์ธํ„ฐ๋ฅผ ์ฒซ๋ฒˆ์งธ ์ธ์ž๋กœ ๋ฐ›๊ณ ,
double์„ ๋‘ ๋ฒˆ์งธ ์ธ์ž๋กœ ๋ฐ›๋Š”๋‹ค. ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฐ’์€ ์—†๋‹ค.

=> void func6(Arffd& (*)(const Arff&, const Map&, int), double);


7.func ์ด๋ผ๋Š” ํ•จ์ˆ˜๋Š” ์œ„์˜ func4๋ผ๋Š” ํ•จ์ˆ˜์˜ ํฌ์ธํ„ฐ๋ฅผ ์ฒซ๋ฒˆ์งธ ์ธ์ž๋กœ ๋ฐ›๊ณ ,
์œ„์˜ func6๋ผ๋Š” ํ•จ์ˆ˜์˜ ํฌ์ธํ„ฐ๋ฅผ ๋‘ ๋ฒˆ์งธ ์ธ์ž๋กœ ๋ฐ›๊ณ , ์œ„์˜ func5๋ผ๋Š”
ํ•จ์ˆ˜์˜ ํฌ์ธํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

=> int (*func(Arffd& (*)(const Arff&, const Map&, int), void (*)(Arffd& (*)(const Arff&, const  Map&, 

         int), double))  (const char*);



์ดํ•ด๋ฅผ ๋•๊ธฐ ์œ„ํ•ด...


ํ•จ์ˆ˜ ํฌ์ธํ„ฐ์˜ ์˜ˆ)


int AA()
{
 puts("AA");


 return 10;
}


void BB()
{
 puts("BB");
}


// ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ  void __( ) ํ˜•ํƒœ์˜ ํ•จ์ˆ˜๋ฅผ ๋ฐ›๊ณ , int __( ) ํ˜•ํƒœ์˜ ํ•จ์ˆ˜๋ฅผ ๋ฆฌํ„ดํ•˜๋Š” ํ•จ์ˆ˜ P

int (*P(void (*PTR)())) ( )
{
 PTR();


 return AA;
}


void main()
{
 int (*pFunc)() = NULL;  // ํ•จ์ˆ˜ ํฌ์ธํ„ฐ ๋ณ€์ˆ˜


 pFunc = P(BB);  // ํ•จ์ˆ˜๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋„˜๊ฒจ์ฃผ๊ณ , ํ•จ์ˆ˜์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ๋ฅผ ๋ฆฌํ„ด ๋ฐ›์Œ


 printf("%d\n", pFunc());  // ์ด ํ•จ์ˆ˜ ํฌ์ธํ„ฐ๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ํ•จ์ˆ˜ ํ˜ธ์ถœ
}