1-3.·¹ÆÛ·±½º

1.º¯¼öÀÇ º°¸í

·¹ÆÛ·±½º(Reference)´Â º¯¼ö¿¡ ´ëÇØ º°¸í(alias)¸¦ Á¤ÀÇÇÏ¿© À̸§À» Çϳª ´õ ºÙÀδÙ. Æ÷ÀÎÅÍ¿Í À¯»çÇÑ ÆÄ»ýÇüÀÌ¸ç »ç¿ëÇÏ´Â ¹æ½Äµµ ºñ½ÁÇÏÁö¸¸ Â÷ÀÌÁ¡µµ ¸¹´Ù.

 

ŸÀÔ &º¯¼ö = ´ë»óü;

 

Æ÷ÀÎÅÍ´Â ±¸µÎÁ¡ *¸¦ ºÙÀ̴µ¥ ºñÇØ ·¹ÆÛ·±½º´Â ±¸µÎÁ¡ &¸¦ ºÙÀδÙ. óÀ½ ¼±¾ðÇÒ ¶§ ´ë»óü¸¦ Á¤ÇØ¾ß ÇϹǷΠÃʱ갪À¸·Î ´ë»óü¸¦ ¹Ýµå½Ã ÁöÁ¤ÇØ¾ß ÇÑ´Ù.

 

ref1

#include <stdio.h>

 

int main()

{

     int i = 3;

     int &ri = i;

 

     printf("i = %d, ri = %d\n", i, ri);

     ri++;

     printf("i = %d, ri = %d\n", i, ri);

     printf("i¹øÁö = %x, ri¹øÁö = %x\n", &i, &ri);

}

½ÇÇà°á°ú

i = 3, ri = 3

i = 4, ri = 4

i¹øÁö = 5dfe7c, ri¹øÁö = 5dfe7c

 

Á¤¼öÇü º¯¼ö i¸¦ ¼±¾ðÇϸç 3À¸·Î ÃʱâÈ­Çß´Ù. Á¤¼öÇü ·¹ÆÛ·±½º ri¸¦ i·Î ÃʱâÈ­Çϸé i¿¡ ´ëÇØ ri¶ó´Â º°¸íÀÌ Çϳª ´õ »ý±ä´Ù. ÀÌÈÄ i¿Í ri´Â ¿ÏÀüÈ÷ µ¿ÀÏÇÑ ´ë»óÀ» °¡¸®ÄÑ µÑ Áß Çϳª¸¦ ¹Ù²Ù¸é ³ª¸ÓÁö Çϳªµµ °°ÀÌ ¹Ù²ï´Ù. ri¸¦ 1 Áõ°¡½ÃÅ°¸é ri »Ó¸¸ ¾Æ´Ï¶ó iµµ °°ÀÌ Áõ°¡µÇ¾î µÑ ´Ù 4°¡ µÇ¸ç ¹Ý´ë·Î i¸¦ º¯°æÇϸé riµµ °°ÀÌ ¹Ù²ï´Ù. µÎ º¯¼ö°¡ ÀúÀåµÇ¾î ÀÖ´Â ¹øÁö¸¦ Ãâ·ÂÇØ º¸¸é ¸Þ¸ð¸® À§Ä¡°¡ °°´Ù.

ÀúÀåµÇ¾î ÀÖ´Â ÁÖ¼Ò°¡ °°À¸´Ï µÎ º¯¼ö´Â À̸§¸¸ ´Ù¸¥ ¿ÏÀüÈ÷ °°Àº º¯¼öÀÌ´Ù. ÀÏ»ó »ýÈ°¿¡¼­ »ç¿ëÇÏ´Â º°¸íÀ̶ó´Â ¿ë¾î¿Í °³³äÀûÀ¸·Î ÀÏÄ¡ÇÑ´Ù. ´ÙÀ½Àº ·¹ÆÛ·±½ºÀÇ ÀϹÝÀûÀΠƯ¡ ¹× ÁÖÀÇ »çÇ×ÀÌ´Ù.

 

¡á º°¸íÀº °°Àº ŸÀÔ¿¡ ´ëÇØ ºÙÀÌ´Â °ÍÀ̾ ·¹ÆÛ·±½º¿Í ´ë»óü´Â ŸÀÔÀÌ ¿ÏÀüÈ÷ ÀÏÄ¡ÇØ¾ß ÇÑ´Ù.

 

int i;

int &ri = i;                        // °¡´É

double &rd = i;           // ¿¡·¯

short &rs = i;                  // ¿¡·¯

unsigned &ru = i;           // ¿¡·¯

 

Á¤¼öÇü(int) º¯¼ö iÀÇ ·¹ÆÛ·±½º´Â ¹Ýµå½Ã Á¤¼öÇü(int)À̾î¾ß ÇÑ´Ù. ½Ç¼öÇü ·¹ÆÛ·±½º·Î´Â iÀÇ º°¸íÀ» ¸¸µé ¼ö ¾øÀ¸¸ç ½ÉÁö¾î intÇü°ú ȣȯµÇ´Â short, unsigned ÇüÀ¸·Îµµ º°¸íÀ» ¸¸µé ¼ö ¾ø´Ù.

¡á ·¹ÆÛ·±½ºÀÇ ´ë»óü´Â ½ÇÁ¦ ¸Þ¸ð¸®¸¦ Á¡À¯ÇÏ°í ÀÖ´Â Áº¯°ªÀ̾î¾ß ÇÑ´Ù. »ó¼ö´Â Áº¯°ªÀÌ ¾Æ´Ï¹Ç·Î ·¹ÆÛ·±½º¸¦ ¸¸µé ¼ö ¾ø°í ºñÆ®Çʵ嵵 ÁÖ¼Ò°¡ ¾ø¾î ·¹ÆÛ·±½ºÀÇ ´ë»óü°¡ µÉ ¼ö ¾ø´Ù.

 

int &ri = 123;

 

ÀÌ ¼±¾ðÀÌ Çã¿ëµÈ´Ù¸é ri = 456; ´ëÀÔ¹®À¸·Î »ó¼ö°ªÀ» ¹Ù²Ü ¼ö ÀÖÀ¸´Ï ¸»ÀÌ ¾ÈµÈ´Ù. ´Ü, const Áö½ÃÀÚ¸¦ ºÙÀÌ¸é »ó¼ö¸¦ °¡¸®Å³ ¼ö ÀÖ´Ù.

 

const int &ri = 123;

 

ÀÌ °æ¿ì ´ë»óü°¡ »ó¼ö¿©¼­ ri´Â Àб⸸ ÇÒ »Ó ¾µ ¼ö´Â ¾ø´Ù. »ó¼ö ·¹ÆÛ·±½º´Â const int ri = 123; ½ÄÀ¸·Î »ó¼ö¸¦ ¼±¾ðÇÏ´Â °Í°ú ¾Æ¹« Â÷ÀÌ°¡ ¾ø¾î ½Ç¿ë¼ºÀÌ ¾ø´Ù.

¡á ·¹ÆÛ·±½º´Â »ý¼ºÇÒ ¶§ ´ë»óü¸¦ ºÐ¸íÈ÷ ÁöÁ¤ÇØ¾ß ÇÑ´Ù. Æ÷ÀÎÅÍ´Â ÀÏ´Ü ¼±¾ð¸¸ ÇØ ³õ°í Â÷ÈÄ¿¡ °¡¸®Å³ º¯¼öÀÇ ¹øÁö¸¦ ´ëÀÔÇÒ ¼ö ÀÖ´Ù. ±×·¯³ª ·¹ÆÛ·±½º´Â óÀ½ ¸¸µé ¶§ºÎÅÍ ´©±¸ÀÇ º°¸íÀÎÁö ¸íÈ®È÷ ÁöÁ¤ÇØ¾ß ÇÏ¸ç ³Î ·¹ÆÛ·±½º¸¦ ÀÎÁ¤ÇÏÁö ¾Ê´Â´Ù.

 

int *pi;         // °¡´É

pi = &i;

int &ri;          // ¿¡·¯

ri = i;

 

Ãʱ갪ÀÌ ¾ø´Â int &ri; ¼±¾ð¹® ÀÚü°¡ ¿¡·¯ÀÌ´Ù. ´Ü, ´ÙÀ½ÀÇ °æ¿ì¿¡´Â ¿¹¿ÜÀûÀ¸·Î Ãʱ갪¾øÀÌ ·¹ÆÛ·±½º¸¦ ¼±¾ðÇÒ ¼ö ÀÖ´Ù.

 

¨ç ÇÔ¼öÀÇ Çü½Ä Àμö·Î »ç¿ëµÇ´Â ·¹ÆÛ·±½º. È£ÃâµÉ ¶§ ½ÇÀμöÀÇ º°¸íÀ¸·Î ÃʱâÈ­µÈ´Ù.

¨è Ŭ·¡½ºÀÇ ¸â¹ö·Î ¼±¾ðµÈ ·¹ÆÛ·±½º. »ý¼ºÀÚ¿¡¼­ ÃʱâÈ­ÇÑ´Ù.

¨é º¯¼ö¸¦ extern ¼±¾ðÇÒ ¶§´Â ¿ÜºÎ¿¡¼­ ÀÌ¹Ì ´ë»óü°¡ ÁöÁ¤µÇ¾î ÀÖ´Ù´Â ¶æÀÌ´Ù.

 

ÀÌ °æ¿ìµµ È£Ãâ ½ÃÁ¡À̳ª °´Ã¼ »ý¼º ½ÃÁ¡À¸·Î ÃʱâÈ­°¡ ¿¬±âµÇ´Â °Í »ÓÀÌÁö ´ë»óü ¾øÀÌ ·¹ÆÛ·±½º¸¦ ¼±¾ðÇÏ´Â °ÍÀº ¾Æ´Ï´Ù. ·¹ÆÛ·±½º´Â ¹Ýµå½Ã ´ë»óü°¡ ÀÖ¾î¾ß ÇÑ´Ù.

¡á ·¹ÆÛ·±½º´Â ¼±¾ðÇÒ ¶§ ÃʱâÈ­µÇ¾î °°Àº ´ë»óü¸¦ °è¼Ó °¡¸®Å²´Ù. ½ÇÇàÁß¿¡ ÂüÁ¶ ´ë»óÀ» º¯°æÇÒ ¼ö ¾ø´Ù.

 

ref2

#include <stdio.h>

 

int main()

{

     int i = 3, j = 7;

     int &ri = i;

 

     printf("i=%d, ri=%d, j=%d\n", i, ri, j);

     ri = j;

     printf("i=%d, ri=%d, j=%d\n", i, ri, j);

}

½ÇÇà°á°ú

i=3, ri=3, j=7

i=7, ri=7, j=7

 

ri¸¦ iÀÇ º°¸íÀ¸·Î ÃʱâÈ­ÇØ ³õ°í Áß°£¿¡ ri = j ´ëÀÔ¹®À¸·Î ri¸¦ º¯°æÇߴµ¥ ±×·±´Ù°í Çؼ­ ri°¡ jÀÇ º°¸íÀÌ µÇ´Â °ÍÀº ¾Æ´Ï´Ù. ri = j ´ëÀÔ¹®¿¡¼­ ri°¡ iÀÇ º°¸íÀ̹ǷΠÀÌ ½ÄÀº i = j¿Í °°´Ù. ·¹ÆÛ·±½º¿¡ ´ëÇÑ ´ëÀÔ ¿¬»êÀÚ´Â ´ë»óü¸¦ º¯°æÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó ´ë»óüÀÇ °ªÀ» º¯°æÇÑ´Ù. ·¹ÆÛ·±½ºÀÇ ´ë»óü´Â ¼±¾ðÇÒ ¶§ µü ÇÑ ¹ø¸¸ ÃʱâÈ­ÇÒ ¼ö ÀÖ´Ù.

¡á ·¹ÆÛ·±½º¿¡ ´ëÇÑ ¸ðµç ¿¬»êÀº ´ë»óü¿¡ ´ëÇÑ ¿¬»êÀÌ´Ù. Á¤¼öÇü ·¹ÆÛ·±½º ri¿¡ ´ëÇؼ­´Â Á¤¼ö¿¡ ´ëÇØ »ç¿ëÇÒ ¼ö ÀÖ´Â ¸ðµç ¿¬»êÀ» ´Ù Àû¿ëÇÒ ¼ö ÀÖÀ¸¸ç È¿°úµµ °°´Ù. Áõ°¨, °ö¼À, ³ª¸ÓÁö, ½¬ÇÁÆ® µîÀº ¹°·ÐÀÌ°í ÁÖ¼Ò ¿¬»êÀÚ &µµ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ÀϺΠ¿¬»ê¸¸ »ç¿ëÇÒ ¼ö ÀÖ´Â Æ÷ÀÎÅÍ¿Í ´Ù¸¥ Á¡ÀÌ´Ù.

2.·¹ÆÛ·±½º Àμö

°°Àº ÇÔ¼ö ³»¿¡¼­ ¶È°°Àº º¯¼ö¿¡ ´ëÇØ À̸§À» µÎ °³ ¸¸µå´Â °ÍÀº »ç½Ç ¾µµ¥¾ø´Â ÁþÀÌ´Ù. ·¹ÆÛ·±½º¸¦ ÇÔ¼öÀÇ Àμö·Î Àü´ÞÇÒ ¶§ ½Ç¿ëÀûÀÎ À§·ÂÀ» ¹ßÈÖÇÑ´Ù. ÇÔ¼ö°¡ ½ÇÀμö¿¡ ´ëÇÑ º°¸íÀ» °¡Áö¸é ½ÇÀμö¸¦ Á÷Á¢ Á¶ÀÛÇÒ ¼ö ÀÖ¾î ¿ÏÀüÇÑ ÂüÁ¶ È£ÃâÀÌ µÈ´Ù. 1±Ç 8Àå¿¡¼­ Æ÷ÀÎÅÍ·Î ÂüÁ¶ È£ÃâÀ» ±¸ÇöÇÑ byref ¿¹Á¦¸¦ ·¹ÆÛ·±½º·Î ¸¸µé¾î º¸ÀÚ.

 

callref

#include <stdio.h>

 

void plusref2(int &ra)

{

     ra = ra + 1;

}

 

int main()

{

     int a = 5;

 

     plusref2(a);

     printf("a = %d\n", a);

}

½ÇÇà°á°ú

a = 6

 

½ÇÇà °á°ú´Â byref ¿¹Á¦¿Í °°´Ù. plusref2 ÇÔ¼ö´Â Àμö·Î Àü´ÞµÈ Á¤¼ö°ªÀ» 1 Áõ°¡½ÃŲ´Ù. 5ÀÇ °ªÀ» °¡Áö´Â a¸¦ ·¹ÆÛ·±½º·Î Àü´ÞÇß°í plusref2 ÇÔ¼ö´Â ÀÌ º¯¼ö¸¦ ra ·¹ÆÛ·±½º·Î ¹Þ¾Æ 1 Áõ°¡½ÃÄ×À¸¹Ç·Î °á±¹ ½ÇÀμö aÀÇ °ªÀÌ Áõ°¡µÈ´Ù. Æ÷ÀÎÅ͸¦ »ç¿ëÇÑ ¿¹Á¦¿Í ¾î¶² Á¡ÀÌ ´Ù¸¥Áö º¸ÀÚ.

 

¡á ÇÔ¼ö´Â Æ÷ÀÎÅÍ°¡ ¾Æ´Ñ ·¹ÆÛ·±½º¸¦ Àμö·Î ¹Þ´Â´Ù. ±×·¡¼­ plusref2 ÇÔ¼ö ³»¿¡¼­ Çü½Ä Àμö ra´Â ½ÇÀμö a¿Í ¿ÏÀüÈ÷ °°Àº º¯¼ö°¡ µÇ¸ç ra¸¦ ¹Ù²Ù¸é aµµ ¹Ù²ï´Ù.

¡á ¹øÁö°¡ ¾Æ´Ï¶ó º¯¼ö ÀÚü¸¦ ¹Þ¾ÒÀ¸¹Ç·Î ÇÔ¼ö º»Ã¼¿¡¼­ Çü½Ä Àμö¸¦ ÂüÁ¶ÇÒ ¶§ *¿¬»êÀÚ¸¦ ºÙÀÌÁö ¾Ê°í ra ÀÚü¸¦ ¹Ù·Î ¾×¼¼½ºÇÑ´Ù. ±¸Á¶Ã¼¸¦ ¹Þ¾Ò´Ù¸é -> ¿¬»êÀÚ°¡ ¾Æ´Ñ. ¿¬»êÀÚ·Î ¸â¹ö¸¦ Àд´Ù.

¡á ÇÔ¼ö È£ÃâºÎ¿¡¼­µµ º¯¼öÀÇ ¹øÁöÀÎ &a¸¦ ³Ñ±âÁö ¾Ê°í º¯¼ö ±× ÀÚüÀÎ a¸¦ Àü´ÞÇÑ´Ù. °ª È£ÃâÀ» ÇÒ ¶§¿Í È£Ãâ Çü½ÄÀÌ °°´Ù.

 

°ª È£ÃâÀº °ª¸¸ ¹Þ±â ¶§¹®¿¡ ÇÔ¼ö ³»ºÎ¿¡¼­ ½ÇÀμö¸¦ º¯°æÇÒ ¼ö ¾ø°í ±¸Á¶Ã¼°°ÀÌ Å« µ¥ÀÌÅÍ´Â º¹»ç ½Ã°£ÀÌ ¿À·¡ °É¸°´Ù. Æ÷ÀÎÅͳª ·¹ÆÛ·±½º¸¦ ¹Þ´Â ÂüÁ¶ È£ÃâÀº ¹øÁö³ª º°¸íÀ» ¹Þ±â ¶§¹®¿¡ ½ÇÀμö¸¦ º¯°æÇÒ ¼ö ÀÖ°í Àü´Þ ¼Óµµµµ ºü¸£´Ù.

Æ÷ÀÎÅÍ¿¡ ºñÇØ ·¹ÆÛ·±½º¸¦ ¹Þ´Â ¹æ¹ýÀº Çü½ÄÀμö¸¦ À̸§À¸·Î ÂüÁ¶ÇÒ ¼ö ÀÖ¾î ±ò²ûÇÏ´Ù. Æ÷ÀÎÅÍ°¡ °¡¸®Å°´Â ½ÇÀμö¸¦ ÂüÁ¶Çϱâ À§ÇØ ÀÏÀÏÀÌ *¸¦ ºÙÀÌ´Â °ÍÀº ¹«Ã´ ±ÍÂúÀº ÀÏÀÌ°í ½Ç¼ö·Î *¸¦ »© ¸ÔÀ¸¸é ¾û¶×ÇÑ µ¿ÀÛÀ» ÇÒ ¼ö ÀÖ´Ù. ƯÈ÷ ÀÌÁß Æ÷ÀÎÅ͸¦ ³Ñ±æ ¶§´Â ·¹ÆÛ·±½º°¡ ´õ Á÷°üÀûÀÌ´Ù.

 

refptr

#include <stdio.h>

#include <malloc.h>

#include <string.h>

 

void InputName(char *&Name)

{

     Name = (char *)malloc(32);

     strcpy(Name, "kim sang hyung");

}

 

int main()

{

     char *Name;

 

     InputName(Name);

     printf("À̸§Àº %sÀÔ´Ï´Ù.\n", Name);

     free(Name);

}

½ÇÇà°á°ú

À̸§Àº kim sang hyungÀÔ´Ï´Ù.

 

 

15Àå¿¡¼­ ¸¸µé¾ú´ø ptrref ¿¹Á¦¸¦ ·¹ÆÛ·±½º·Î ¹Ù²Ù¾î º¸¾Ò´Ù. char *&NameÀμö°¡ Æ÷ÀÎÅÍÀÇ ·¹ÆÛ·±½ºÀÌ´Ù. TÇüÀÇ ·¹ÆÛ·±½º´Â T &À̸ç char * ÀÚü°¡ ÇϳªÀÇ Å¸ÀÔÀ̹ǷΠÀÌ Å¸ÀÔ¿¡ ´ëÇÑ ·¹ÆÛ·±½º´Â char *&ÀÌ´Ù. char &*°¡ ¾Æ´ÔÀ» ÁÖÀÇÇÏÀÚ. Æ÷ÀÎÅÍ ÀÚü¸¦ ¹Þ¾ÒÀ¸¹Ç·Î NameÀ̶ó´Â À̸§À¸·Î ¸Þ¸ð¸®¸¦ ÇÒ´çÇÏ°í ¿©±â¿¡ ¹®ÀÚ¿­À» º¹»çÇØ ³ÖÀ¸¸é µÈ´Ù.

¶Ç Æ÷ÀÎÅÍ´Â ÀáÀçÀû ¹è¿­À̾ ÁÖº¯°ªÀ» ¸¶À½´ë·Î °Çµå¸± ¼ö Àִµ¥ ºñÇØ ·¹ÆÛ·±½º´Â ´ë»óü¸¸ ¾×¼¼½ºÇÒ ¼ö ÀÖ¾î ´õ ¾ÈÀüÇÏ´Ù. ±×·¯³ª È£ÃâºÎÀÇ Çü½ÄÀÌ °ª È£Ãâ°ú °°¾Æ ÇÔ¼ö ¿øÇüÀ» ºÁ¾ß¸¸ ÂüÁ¶È£ÃâÀÎÁö °ªÈ£ÃâÀÎÁö ¾Ë ¼ö ÀÖ´Â ¹ø°Å·Î¿òÀÌ ÀÖ´Ù. ±×·¡¼­ ·¹ÆÛ·±½º¸¦ ¹Þ´Â ÇÔ¼ö´Â À̸§ µÚ¿¡ Ref³ª ByRef µîÀ» Á¢¹Ì¸¦ ºÙÀÌ´Â °ÍÀÌ ÁÁ´Ù.

 

¼¿ÇÁ Å×½ºÆ®

1-3. µÎ °³ÀÇ Á¤¼ö Àμö x, y¸¦ ·¹ÆÛ·±½º·Î  ¹Þ¾Æ ÁÂÇ¥°ªÀ» ÀԷ¹޴ getposition ÇÔ¼ö¸¦ ÀÛ¼ºÇ϶ó. ÇÔ¼ö ÀÚü´Â ¸®ÅÏ°ªÀÌ ¾ø¾îµµ ¹«¹æÇÏ´Ù.

 

3.·¹ÆÛ·±½ºÀÇ ´ë»óü

±âº»ÇüÀº ¹°·ÐÀÌ°í Æ÷ÀÎÅÍ¿¡ ´ëÇؼ­µµ ·¹ÆÛ·±½º¸¦ ¼±¾ðÇÒ ¼ö ÀÖ´Ù. º° ½Ç¿ë¼ºÀº ¾øÁö¸¸ ¹è¿­À̳ª ÇÔ¼ö¿¡ ´ëÇÑ ·¹ÆÛ·±½ºµµ °¡´ÉÇÏ´Ù. ±×·¯³ª ¸ðµç ŸÀÔ¿¡ ´ëÇÑ ·¹ÆÛ·±½º¸¦ ´Ù ¼±¾ðÇÒ ¼ö ÀÖ´Â °ÍÀº ¾Æ´Ï¸ç ÀϺΠºÒ°¡´ÉÇÑ Çü½Äµµ ÀÖ´Ù.

 

¡á ·¹ÆÛ·±½º¿¡ ´ëÇÑ ·¹ÆÛ·±½º´Â ¼±¾ðÇÒ ¼ö ¾ø´Ù. ·¹ÆÛ·±½º°¡ º°¸íÀε¥ º°¸í¿¡ ´ëÇØ ¶Ç ´Ù¸¥ º°¸íÀ» ºÙÀÌ´Â °ÍÀº ½Ç¿ëÀû °¡Ä¡°¡ ¾ø±â ¶§¹®ÀÌ´Ù. Æ÷ÀÎÅÍ´Â 2Áß Æ÷ÀÎÅÍ°¡ ÀÖÁö¸¸ ·¹ÆÛ·±½º´Â ÁßøÀ» Çã¶ôÇÏÁö ¾Ê´Â´Ù.

 

int i;

int &ri = i;

int &rri = ri;

 

ri´Â i¿¡ ´ëÇÑ ·¹ÆÛ·±½º·Î ¼±¾ðµÇ¾ú°í rri´Â ri¿¡ ´ëÇÑ ·¹ÆÛ·±½º·Î ¼±¾ðµÇ¾ú´Ù. À̶§ rri°¡ 2Áß ·¹ÆÛ·±½ºÀÎ °Íó·³ º¸ÀÌÁö¸¸ rri´Â ´Ü¼ø ·¹ÆÛ·±½º¿¡ ºÒ°úÇÏ´Ù. ri°¡ iÀ̹ǷΠrri´Â iÀÇ ¶Ç ´Ù¸¥ º°¸íÀÏ »ÓÀÌ¸ç °á±¹ rri¿Í ri´Â °°Àº ´ë»óÀ» °¡¸®Å°´Â ´Ù¸¥ º°¸íÀÌ´Ù. int &&rri = i; °°Àº ¼±¾ð¹®Àº ÇÊ¿äÄ¡ ¾ÊÀ¸¸ç ¿¡·¯·Î 󸮵ȴÙ.

¡á Æ÷ÀÎÅÍ¿¡ ´ëÇÑ ·¹ÆÛ·±½º´Â °¡´ÉÇÏÁö¸¸ ¿ªÀ¸·Î ·¹ÆÛ·±½º¿¡ ´ëÇÑ Æ÷ÀÎÅÍ´Â ¼±¾ðÇÒ ¼ö ¾ø´Ù.

 

int i;

int &ri = i;

int &*pri = &ri;       // ¿¡·¯

 

·¹ÆÛ·±½º¿¡ ´ëÇÑ Æ÷ÀÎÅÍ pri ¼±¾ð¹®Àº ¿¡·¯·Î 󸮵ȴÙ. °³³äÀûÀ¸·Î ·¹ÆÛ·±½º¿¡ ´ëÇÑ Æ÷ÀÎÅÍ´Â ·¹ÆÛ·±½ºÀÇ ´ë»óü¿¡ ´ëÇÑ Æ÷ÀÎÅÍÇüÀ̹ǷΠ´Ü¼ø Æ÷ÀÎÅÍ¿Í °°À¸¸ç ±»ÀÌ ·¹ÆÛ·±½ºÀÇ Æ÷ÀÎÅÍÇüÀ» Á¤ÀÇÇÒ ÇÊ¿ä°¡ ¾ø´Ù. int *pi = &ri¶ó´Â ¼±¾ðÀº °¡´ÉÇϸç pi°¡ ri, Áï iÀÇ ÁÖ¼Ò¸¦ °¡¸®Å²´Ù.

¡á ·¹ÆÛ·±½ºÀÇ ¹è¿­µµ ¼±¾ðÇÒ ¼ö ¾ø´Ù. TÇü ¹è¿­À̶õ °ð TÇü Æ÷ÀÎÅÍÀε¥ ·¹ÆÛ·±½º¿¡ ´ëÇÑ Æ÷ÀÎÅ͸¦ ¼±¾ðÇÒ ¼ö ¾øÀ¸¹Ç·Î ¹è¿­µµ ¼±¾ðÇÒ ¼ö ¾ø´Ù. i¿Í j¿¡ ´ëÇÑ ·¹ÆÛ·±½º°¡ ÇÊ¿äÇÏ¸é °¢°¢ µû·Î ·¹ÆÛ·±½º¸¦ ¼±¾ðÇØ¾ß ÇÑ´Ù.

 

int i, j;

int &ra[2]={i,j};         // ¿¡·¯

 

¿ä¾àÇÏÀÚ¸é ·¹ÆÛ·±½º´Â ÁßøÇÒ ¼ö ¾ø°í Æ÷ÀÎÅͳª ¹è¿­°°Àº ÆÄ»ýÇüÀ» ¸¸µé ¼ö ¾ø´Ù. TÇü¿¡ ´ëÇØ TÇü Æ÷ÀÎÅͳª TÇü ¹è¿­µµ Ç×»ó °¡´ÉÇÏÁö¸¸ ·¹ÆÛ·±½º¿¡ ´ëÇؼ­´Â ¿¹¿Ü°¡ Àû¿ëµÈ´Ù. ¹®¹ýÀûÀ¸·Î ºÒ°¡´ÉÇؼ­°¡ ¾Æ´Ï¶ó ½Ç¿ë¼ºÀÌ ¾ø±â ¶§¹®¿¡ ±ÝÁöÇÑ´Ù.

4.·¹ÆÛ·±½º ¸®ÅÏ

ÇÔ¼ö°¡ ·¹ÆÛ·±½º ŸÀÔÀ» ¸®ÅÏÇÒ ¼öµµ ÀÖ´Ù. ÀÌ·¸°Ô µÇ¸é ¸®ÅϵǴ ´ë»óÀÌ Áº¯°ªÀÇ º°¸íÀÌ´Ù º¸´Ï ÇÔ¼ö È£Ãâ¹®¿¡ °ªÀ» ´ëÀÔÇÏ´Â °ÍÀÌ °¡´ÉÇØÁø´Ù.

 

refreturn

#include <stdio.h>

 

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

 

int &GetAr(int i)

{

     return ar[i];

}

 

int main()

{

     GetAr(3) = 6;

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

}

½ÇÇà°á°ú

ar[3] = 6

 

GetAr ÇÔ¼ö´Â ar ¹è¿­¿¡¼­ i¹ø° ¿ä¼Ò¸¦ ã¾Æ ±× ¿ä¼ÒÀÇ º°¸íÀ» ¸®ÅÏÇÑ´Ù. GetAr(3)ÀÌ ¸®ÅÏÇÏ´Â °ªÀº ar[3]ÀÇ º°¸íÀ̸ç ÀÌ ¿ä¼Ò´Â ¿ÂÀüÇÑ Áº¯°ªÀ̱⠶§¹®¿¡ ÇÔ¼ö È£Ãâ¹®ÀÌ ´ëÀÔ½ÄÀÇ Áº¯¿¡ ¿Ã ¼ö ÀÖ´Ù. GetArÀÌ Ã£Àº ¹è¿­ ¿ä¼Ò¿¡ 6À» ´ëÀÔÇÑ ÈÄ Ãâ·ÂÇØ º¸¸é ¹è¿­ ¿ä¼Ò°¡ º¯°æµÇ¾î ÀÖ´Ù.

CÀÇ ÇÔ¼ö´Â °ªÀ» ¸®ÅÏÇϱ⠶§¹®¿¡ ÀÌ·± Çü½ÄÀ» ¾µ ¼ö ¾øÁö¸¸ ·¹ÆÛ·±½º´Â Áº¯°ªÀ̾ ÇÔ¼ö È£Ãâ¹®¿¡ ¹º°¡¸¦ ´ëÀÔÇÒ ¼ö ÀÖ´Ù. Å« ¹è¿­ arSome ¿¡¼­ ¾î¶² º¹ÀâÇÑ Á¶°ÇÀ¸·Î ÇÑ ¿ä¼Ò¸¦ °Ë»öÇÏ¿© º¯°æÇÏ°í ½ÍÀ» ¶§ C ¾ð¾î¿¡¼­´Â ´ÙÀ½°ú °°ÀÌ ÇÑ´Ù.

 

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

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

 

FindMatch ÇÔ¼ö´Â ÀÔ·ÂµÈ Á¶°ÇÀ¸·ÎºÎÅÍ ¹è¿­ ¿ä¼Ò¸¦ °Ë»öÇÏ¿© ±× ÷ÀÚ¸¦ ¸®ÅÏÇÑ´Ù. È£Ãâ¿øÀº ÀÌ ÇÔ¼öÀÇ ¸®ÅÏ°ªÀ» ÷ÀÚ·Î »ç¿ëÇÏ¿© arSome ¹è¿­ÀÇ ÇÑ ¿ä¼Ò¸¦ ¾×¼¼½ºÇÑ´Ù. ÷ÀÚ ¿¬»êÀÚ [ ] ¾È¿¡ ÇÔ¼ö È£Ãâ¹®ÀÌ µé¾î°¡ º¹ÀâÇѵ¥ ·¹ÆÛ·±½º¸¦ ¸®ÅÏÇÏ¸é ´õ °£´ÜÇØÁø´Ù.

 

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

FindMatchRef(...) = Data;

 

FindMatchRef ÇÔ¼ö´Â Á¶°Ç¿¡ ¸Â´Â ¿ä¼Ò¸¦ ã¾Æ ±× ¿ä¼Ò ÀÚü¸¦ ¸®ÅÏÇϸç È£Ãâ¿øÀº ¸®ÅÏµÈ ·¹ÆÛ·±½º¿¡ °ð¹Ù·Î °ªÀ» ´ëÀÔÇÑ´Ù. ÇÔ¼ö¸¦ ´ëÀÔ½ÄÀÇ Áº¯¿¡ ¾µ ¼ö ÀÖ´Ù´Â °ÍÀº ¹«Ã´ Èï¹Ì·ÓÁö¸¸ ±âÁ¸ÀÇ ÄÚµå¿Í ÀÌÁúÀûÀÌ°í Á÷°ü¼ºÀÌ ¶³¾îÁö¹Ç·Î ÀÚÀçÇÏ´Â °ÍÀÌ ÁÁ´Ù. ±×·¯³ª ´ÙÀ½¿¡ ¹è¿ï ¿¬»êÀÚ ¿À¹ö·Îµù¿¡´Â ÀÌ ±â¹ýÀÌ ²À ÇÊ¿äÇÏ´Ù.

5.·¹ÆÛ·±½ºÀÇ ³»ºÎ

·¹ÆÛ·±½º´Â ±²ÀåÈ÷ Ư¼öÇÏ°í ½Å±âÇØ º¸ÀÌÁö¸¸ ³»ºÎ¸¦ µé¿©´Ù º¸¸é Æ÷ÀÎÅÍÀÇ º¯Çü¿¡ ºÒ°úÇÏ´Ù. ÄÄÆÄÀÏ·¯´Â ·¹ÆÛ·±½º¸¦ Æ÷ÀÎÅÍ·Î ¹Ù²ã ÄÄÆÄÀÏÇÏ¸ç ³»ºÎ ±¸Çöµµ Æ÷ÀÎÅÍ·Î µÇ¾î ÀÖ´Ù. ÀÌ ÀýÀÇ Ã¹ ¹ø° ¿¹Á¦´Â ³»ºÎÀûÀ¸·Î ´ÙÀ½°ú °°ÀÌ ÄÄÆÄÀϵȴÙ.

 

int i = 3;

int &ri = i;

 

printf("i = %d, ri = %d\n", i, ri);

ri++;

printf("i = %d, ri = %d\n", i, ri);

printf("i¹øÁö = %x, ri¹øÁö = %x\n", &i, &ri);

 

int i = 3;

int *ri = &i;

 

printf("i = %d, ri = %d\n", i, (*ri));

(*ri)++;

printf("i=%d, ri=%d\n", i, (*ri));

printf("i¹øÁö = %x, ri¹øÁö = %x\n", &i, &(*ri));

int &ri = i; ¼±¾ð¹®¿¡ ´ëÇØ ÄÄÆÄÀÏ·¯´Â ri¸¦ Á¤¼öÇü Æ÷ÀÎÅÍ·Î »ý¼ºÇÏ°í iÀÇ ÁÖ¼Ò°ªÀ¸·Î ÃʱâÈ­ÇÑ´Ù. ·¹ÆÛ·±½º°¡ Æ÷ÀÎÅÍÀ̹ǷΠ´ë»óü¿¡ ´ëÇØ ¾Ï½ÃÀûÀ¸·Î & ¿¬»êÀÚ¸¦ ºÙÀδÙ. Äڵ忡¼­ ri¸¦ ÂüÁ¶ÇÏ´Â ¸ðµç ¹®Àå¿¡ ´ëÇØ ¾Ï½ÃÀûÀ¸·Î *¿¬»êÀÚ¸¦ Àû¿ëÇÏ¿© ri°¡ °¡¸®Å°´Â ´ë»óü¸¦ Àд´Ù. (*ri)°¡ °ð i¿Í °°À¸´Ï ri´Â iÀÇ ¿ÏÀüÇÑ º°¸íÀ¸·Î µ¿ÀÛÇÑ´Ù. ÂüÁ¶È£ÃâÀ» ÇÏ´Â plusref2 ÇÔ¼ö´Â ´ÙÀ½°ú °°ÀÌ ¹ø¿ªµÈ´Ù.

 

void plusref2(int &a)

{

     a = a + 1;

}

plusref2(i);

void plusref2(int *a)

{

     (*a) = (*a) + 1;

}

plusref2(&i);

 

plusref2 ÇÔ¼öÀÇ Àμö´Â ½ÇÁ¦·Î´Â Á¤¼öÇü Æ÷ÀÎÅÍÀÌ¸ç º»Ã¼¿¡¼­ ÀÌ Àμö¿¡ ´ëÇØ ÀÏÀÏÀÌ * ¿¬»êÀÚ¸¦ Àû¿ëÇÏ¿© ½ÇÀμö¸¦ ÂüÁ¶ÇÑ´Ù. ÀÌ ÇÔ¼ö¸¦ È£ÃâÇÒ ¶§ plusref2(i)·Î ½ÇÀμö¸¦ Àü´ÞÇϸé plusref2(&i)·Î Çؼ®ÇÏ¿© ¹øÁö¸¦ ´ë½Å Àü´ÞÇÑ´Ù.

³»ºÎÀûÀ¸·Î Æ÷ÀÎÅÍ·Î ±¸ÇöµÇ¾î ÀÖ°í Æ÷ÀÎÅÍÀÇ ´ë»óü´Â ¹Ýµå½Ã Áº¯°ªÀ̾î¾ß ÇÑ´Ù. ±×·¯´Ù º¸´Ï ·¹ÆÛ·±½ºÀÇ ´ë»óüµµ Áº¯°ª¸¸ °¡´ÉÇÏ¸ç »ó¼ö´Â ¾µ ¼ö ¾ø´Ù. ´ÙÀ½Àº ·¹ÆÛ·±½º¸¦ ¸®ÅÏÇÏ´Â GetAr ÇÔ¼ö°¡ ¾î¶»°Ô ¹ø¿ªµÇ´ÂÁö º¸ÀÚ. ÀÌ ÇÔ¼öµµ ¸¶Âù°¡Áö·Î ½ÇÁ¦·Î´Â Æ÷ÀÎÅ͸¦ ¸®ÅÏÇÑ´Ù.

 

int &GetAr(int i)

{

     return ar[i];

}

GetAr(3)=6;

int *GetAr(int i)

{

     return &ar[i];

}

(*GetAr(3))=6;

 

´ë»óüÀÇ ¹øÁö¸¦ ¸®ÅÏÇϸç È£Ãâ¹®Àº * ¿¬»êÀÚ¸¦ Àû¿ëÇÏ¿© ¸®ÅÏµÈ ´ë»óü¸¦ °¡¸®Å²´Ù. ÇÔ¼ö°¡ ¸®ÅÏÇÏ´Â °ÍÀº °á±¹ ¹øÁö¶ó´Â °ªÀÌÁö¸¸ ÀÌ ¹øÁö¿¡ * ¿¬»êÀÚ°¡ ¾Ï½ÃÀûÀ¸·Î Àû¿ëµÇ¾î Áº¯°ªÀÌ µÇ¹Ç·Î ÇÔ¼ö È£Ãâ¹®ÀÌ Áº¯¿¡ ¿Ã ¼ö ÀÖ´Ù.

°á±¹ ·¹ÆÛ·±½º´Â ÄÄÆÄÀÏ·¯°¡ ³»ºÎ¿¡¼­ Àý¹¦ÇÏ°Ô Á¶ÀÛÇÏ´Â ±â¸¸ÀûÀÎ Æ÷ÀÎÅÍÀÏ »ÓÀÌ´Ù. ÇÏÁö¸¸ ·¹ÆÛ·±½º´Â ÁÖ¼Ò¸¦ ÀÐ°í ³»¿ëÀ» ¾×¼¼½ºÇÏ´Â &, * ¿¬»êÀÚ¸¦ ºÙÀÌ´Â °úÁ¤ÀÌ ÀÚµ¿È­µÇ¾î ÀÖ¾î Äڵ尡 °£°áÇØÁö´Â ÀÌÁ¡ÀÌ ÀÖ´Ù. Æ÷ÀÎÅÍ¿¡ ´ëÇØ ¾Ï½ÃÀû ¿¬»êÀÚ¸¦ ºÙ¿© ÀÏ¹Ý º¯¼öó·³ ¾µ ¼ö ÀÖ°Ô ÇØ ÁÖ´Â ÆíÀǹ®¹ýÀÌ´Ù.

´çÀåÀº ·¹ÆÛ·±½º°¡ ¿Ö ÇÊ¿äÇÑÁö °¨À» Àâ±â ¾î·Æ°ÚÁö¸¸ ¿©±â¼­´Â º°¸íÀ̶ó´Â °Í¸¸ ÀÌÇØÇÏ°í ³Ñ¾î°¡ÀÚ. Ŭ·¡½º°¡ ¿ÏÀüÇÑ Å¸ÀÔÀÌ µÇ±â À§Çؼ­´Â ±â´É »Ó¸¸ Çü½Ä±îÁöµµ ±âº» ŸÀÔ°ú ÀÏÄ¡½ÃÄÑ¾ß ÇÒ ÇÊ¿ä°¡ Àִµ¥ º¹»ç »ý¼ºÀÚ³ª ¿¬»êÀÚ ¿À¹ö·Îµù¿¡ ·¹ÆÛ·±½º°¡ À¯¿ëÇÏ°Ô »ç¿ëµÈ´Ù.