15-4-¶ó.·¹ÆÛ·±½º ¸®ÅÏ°ª

·¹ÆÛ·±½º´Â ÇÔ¼öÀÇ ¸®ÅÏ°ªÀ¸·Îµµ »ç¿ëµÉ ¼ö ÀÖ´Ù. ´ÙÀ½ ¿¹Á¦ÀÇ GetAr ÇÔ¼ö´Â Á¤¼öÇü ¹è¿­¿¡¼­ i¹ø° ¿ä¼Ò ÀÚü¸¦ ¸®ÅÏÇÑ´Ù.

 

¿¹ Á¦ : RefReturn

#include <Turboc.h>

 

int ar[]={1,2,3,4,5};

 

int &GetAr(int i)

{

     return ar[i];

}

 

void main()

{

     GetAr(3)=6;

     printf("ar[3]=%d\n",ar[3]);

}

 

·¹ÆÛ·±½º´Â º¯¼ö ±× ÀÚüÀÌ¸ç ¿ÂÀüÇÑ Áº¯°ªÀ̱⠶§¹®¿¡ ÇÔ¼ö°¡ ¸®ÅÏÇÏ´Â ·¹ÆÛ·±½º°¡ ´ëÀÔ ¿¬»êÀÚÀÇ Áº¯¿¡ ³õÀÏ ¼ö ÀÖ´Ù. ±×·¡¼­ ÇÔ¼öÀÇ È£Ãâ¹®ÀÌ Áº¯ÀÌ µÉ ¼ö ÀÖÀ¸¸ç ¿¹Á¦ÀÇ Äڵ忡¼­Ã³·³ GetAr(3)=6; °°Àº ¹®ÀåÀÌ °¡´ÉÇØÁø´Ù. °ªÀ» ¸®ÅÏÇÏ´Â CÀÇ ÇÔ¼ö¿¡¼­´Â ÀÌ°ÍÀÌ ºÒ°¡´ÉÇÏÁö¸¸ ·¹ÆÛ·±½º¸¦ ¸®ÅÏÇÏ´Â C++¿¡¼­´Â ÇÔ¼ö È£Ãâ¹®¿¡ ¾î¶² °ªÀ» ´ëÀÔÇÏ´Â °ÍÀÌ °¡´ÉÇÏ´Ù.

À§ ¿¹Á¦ÀÇ ½ÇÇà °á°ú ar[3]ÀÌ 6À¸·Î º¯°æµÈ´Ù. GetAr ÇÔ¼ö´Â Àμö·Î Àü´ÞµÈ i¸¦ ar ¹è¿­ÀÇ Ã·ÀÚ·Î Çؼ®ÇÏ¿© ar[i]ÀÇ ·¹ÆÛ·±½º¸¦ ¸®ÅÏÇÏ¸ç ´ëÀÔ ¿¬»ê¹®¿¡ ÀÇÇØ ar[i]¿¡ 6À» ´ëÀÔÇ߱⠶§¹®ÀÌ´Ù. Å« ¹è¿­¿¡¼­ ¾î¶² º¹ÀâÇÑ Á¶°ÇÀ¸·Î ÇÑ ¿ä¼Ò¸¦ ¼±ÅÃÇؼ­ ±× °ªÀ» º¯°æÇÏ°íÀÚ ÇÒ ¶§ C¾ð¾î¶ó¸é ´ÙÀ½°ú °°ÀÌ ÇØ¾ß ÇÑ´Ù. ÆíÀÇ»ó ¹è¿­Àº arSomeÀ̶ó´Â À̸§ÀÇ Á¤¼öÇü ¹è¿­À̶ó°í ÇÏÀÚ.

 

int FindMatch(char *name, int value, BOOL bCase);

arSome[FindMatch(...)] = Data;

 

FindMatch ÇÔ¼ö´Â ÀÔ·ÂµÈ ¼¼ °¡Áö Á¶°ÇÀ¸·ÎºÎÅÍ ÀûÇÕÇÑ ¹è¿­ ¿ä¼Ò¸¦ ¼±ÅÃÇؼ­ ±× ÷ÀÚ¸¦ ¸®ÅÏÇϵµ·Ï µÇ¾î ÀÖ´Ù. È£Ãâ¿ø¿¡¼­´Â ÀÌ ÇÔ¼ö°¡ ¸®ÅÏÇϴ ÷ÀڷκÎÅÍ arSome ¹è¿­ÀÇ ÇÑ ¿ä¼Ò¸¦ ¾×¼¼½ºÇÑ´Ù. ·¹ÆÛ·±½º¸¦ ¾´´Ù¸é ´ÙÀ½°ú °°ÀÌ ÀÛ¼ºÇÒ ¼ö ÀÖ´Ù.

 

int &FindMatchRef(char *name, int value, BOOL bCase);

FindMatchRef(...) = Data;

 

FindMatchRef ÇÔ¼ö´Â ³»ºÎ¿¡¼­ Á¶°Ç¿¡ ¸Â´Â ¿ä¼Ò¸¦ ¼±ÅÃÇÏ°í ±× ¿ä¼Ò ÀÚü¸¦ ¸®ÅÏÇϸç È£Ãâ¿ø¿¡¼­´Â FindMatchRef ÇÔ¼ö°¡ ¸®ÅÏÇÏ´Â ¹è¿­ ¿ä¼Ò¿¡ °ð¹Ù·Î °ªÀ» ´ëÀÔÇÒ ¼ö ÀÖ´Ù. ¸¸¾à ÀÌ ÇÔ¼ö°¡ ¸®ÅÏÇÏ´Â ´ë»óÀÌ ±¸Á¶Ã¼ÀÇ ·¹ÆÛ·±½º¶ó¸é FindMatchRef(...).Member = Data; Çü½ÄÀ¸·Î ÇÔ¼ö È£ÃâºÎ ´ÙÀ½¿¡ ¸â¹ö ¿¬»êÀÚ¸¦ ¾²´Â °Íµµ °¡´ÉÇÏ´Ù.

ÇÔ¼ö°¡ ·¹ÆÛ·±½º¸¦ ¸®ÅÏÇÒ ¼ö ÀÖÀ½À¸·Î Çؼ­ ´ëÀÔ½ÄÀÇ Áº¯¿¡ ¾µ ¼ö ÀÖ´Ù´Â °ÍÀº ¹«Ã´ Èï¹Ì·Ó°í Àç¹ÌÀÖ´Â »ç½ÇÀÓ¿¡´Â ºÐ¸íÇÏ´Ù. ±×·¯³ª func()=a; ½ÄÀÇ ¹®ÀåÀº Á÷°üÀûÀÌÁö ¸øÇÏ°í Àͼ÷ÇÏÁö ¾Ê±â ¶§¹®¿¡ È¥¶õ½º·¯¿ö º¸ÀδÙ. ²À ÇÊ¿äÇÏÁö ¾Ê´Ù¸é ·¹ÆÛ·±½º¸¦ ¸®ÅÏÇÏ´Â ÇÔ¼ö´Â °¡±ÞÀû ÀÚÀçÇÏ´Â °ÍÀÌ ÁÁ´Ù. ¸®ÅÏ°ªÀ¸·Î ·¹ÆÛ·±½º¸¦ ²À »ç¿ëÇØ¾ß ÇÏ´Â °æ¿ì´Â ¹Ù·Î ¿¬»êÀÚ¸¦ ¿À¹ö·ÎµùÇÒ ¶§Àε¥ ÀÌ¿¡ ´ëÇؼ­´Â °ü·ÃÀå¿¡¼­ µû·Î ÀÚ¼¼È÷ ¿¬±¸ÇØ º¸µµ·Ï ÇÏÀÚ.

´ÙÀ½Àº ·¹ÆÛ·±½º¸¦ ¸®ÅÏÇÒ ¶§ÀÇ ÁÖÀÇ »çÇ׿¡ ´ëÇØ ¾Ë¾Æº¸ÀÚ. Áö±ØÈ÷ »ó½ÄÀûÀÎ ³»¿ëÀÌÁö¸¸ ´ÙÀ½°ú °°Àº Çü½ÄÀº ¹«Ã´ À§ÇèÇÏ´Ù.

 

int &func()

{

     int t;

     ....

     return t;

}

 

func ÇÔ¼ö´Â Áö¿ªº¯¼ö tÀÇ ·¹ÆÛ·±½º¸¦ ¸®ÅÏÇϴµ¥ ÀÌ°ÍÀÌ ¹®¹ýÀûÀ¸·Î ¹®Á¦´Â ¾ø´Ù°í ÇÏ´õ¶óµµ Àý´ë·Î ¾ÈÀüÇÏÁö´Â ¾Ê´Ù. ÇÔ¼ö°¡ ³¡³ª¸é »ç¶óÁú º¯¼ö¿¡ ´ëÇÑ ·¹ÆÛ·±½º¸¦ ¸®ÅÏÇÏ°í ÀÖÀ¸¹Ç·Î È£ÃâºÎ¿¡¼­ ÀÌ ·¹ÆÛ·±½º¸¦ ÂüÁ¶ÇÏ¸é ¾û¶×ÇÑ ¸Þ¸ð¸® À§Ä¡¸¦ ¾×¼¼½ºÇÏ°Ô µÉ °ÍÀÌ´Ù. Æ÷ÀÎÅÍ¿¡ ´ëÇؼ­µµ ¸¶Âù°¡Áö·Î Áö¿ªº¯¼öÀÇ ¹øÁö¸¦ ¸®ÅÏÇÏ´Â °ÍÀº ¾ÈÀüÇÏÁö ¾Ê´Ù.

µ¿ÀûÀ¸·Î ÇÒ´çÇÑ º¯¼öÀÇ ·¹ÆÛ·±½º¸¦ ¸®ÅÏÇÏ´Â °Íµµ °¡´ÉÇϱâ´Â ÇÏÁö¸¸ º°·Î ÁÁÁö ¾Ê´Ù. ¿Ö³ÄÇϸé ÇÔ¼ö ³»ºÎ¿¡¼­ ÇÒ´çÇÑ º¯¼ö¸¦ ¿ÜºÎ¿¡¼­ ÇØÁ¦Çϱâ À§Çؼ­´Â °á±¹ Æ÷ÀÎÅÍ°¡ ÇÊ¿äÇѵ¥ ¸®ÅÏµÈ ·¹ÆÛ·±½º¸¦ ¹Ù·Î ´ëÀÔ¹Þ¾Æ ¹ö¸®¸é Æ÷ÀÎÅ͸¦ ÀÒ¾î ¹ö¸®±â ¶§¹®ÀÌ´Ù. ¾ïÁö·Î ¿¹Á¦¸¦ ¸¸µç´Ù¸é ´ÙÀ½°ú °°ÀÌ ¸¸µé ¼ö´Â ÀÖ´Ù.

 

¿¹ Á¦ : PtrRefReturn

#include <Turboc.h>

 

int &func()

{

     int *pt;

 

     pt=(int *)malloc(sizeof(int));

     *pt=3;

     return *pt;

}

 

void main()

{

     int *pi;

     pi=&func();

     printf("%d\n",*pi);

     free(pi);

}

 

func´Â µ¿ÀûÀ¸·Î Á¤¼öÇü º¯¼ö Çϳª¸¦ ÇÒ´çÇÏ¿© ±× ·¹ÆÛ·±½º¸¦ ¸®ÅÏÇϴµ¥ È£ÃâºÎ¿¡¼­´Â ÀÌ ¸®ÅÏ°ªÀÇ ¹øÁö¸¦ Æ÷ÀÎÅÍ º¯¼ö·Î ¹Þ¾Æ¾ß ÇÑ´Ù. ±×·¸Áö ¾Ê°í int i;i=func(); Çü½ÄÀ¸·Î ·¹ÆÛ·±½ºÀÇ °ª¸¸ ÃëÇϸé ÀÌ º¯¼ö¸¦ ¾µ ¼ö´Â ÀÖÁö¸¸ Æ÷ÀÎÅ͸¦ ÀÒ¾î ¹ö·È±â ¶§¹®¿¡ free¸¦ ÇÒ ¼ö ¾ø°Ô µÈ´Ù. ÇÔ¼ö ³»ºÎ¿¡¼­ µ¿Àû ÇÒ´çÀ» ÇÒ ¶§´Â Æ÷ÀÎÅ͸¦ ¾²´Â °ÍÀÌ ´õ ÁÁÀº ¼±ÅÃÀÌ´Ù.