·¹ÆÛ·±½º(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¿¡ ´ëÇؼ´Â
Á¤¼ö¿¡ ´ëÇØ »ç¿ëÇÒ ¼ö ÀÖ´Â ¸ðµç ¿¬»êÀ» ´Ù Àû¿ëÇÒ ¼ö ÀÖÀ¸¸ç È¿°úµµ °°´Ù. Áõ°¨, °ö¼À, ³ª¸ÓÁö, ½¬ÇÁÆ®
µîÀº ¹°·ÐÀÌ°í ÁÖ¼Ò ¿¬»êÀÚ &µµ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ÀϺÎ
¿¬»ê¸¸ »ç¿ëÇÒ ¼ö ÀÖ´Â Æ÷ÀÎÅÍ¿Í ´Ù¸¥ Á¡ÀÌ´Ù.
°°Àº ÇÔ¼ö ³»¿¡¼ ¶È°°Àº º¯¼ö¿¡ ´ëÇØ À̸§À» µÎ °³ ¸¸µå´Â °ÍÀº »ç½Ç ¾µµ¥¾ø´Â ÁþÀÌ´Ù. ·¹ÆÛ·±½º¸¦ ÇÔ¼öÀÇ Àμö·Î Àü´ÞÇÒ ¶§ ½Ç¿ëÀûÀÎ À§·ÂÀ» ¹ßÈÖÇÑ´Ù. ÇÔ¼ö°¡
½ÇÀμö¿¡ ´ëÇÑ º°¸íÀ» °¡Áö¸é ½ÇÀμö¸¦ Á÷Á¢ Á¶ÀÛÇÒ ¼ö ÀÖ¾î ¿ÏÀüÇÑ ÂüÁ¶ È£ÃâÀÌ µÈ´Ù. 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 ÇÔ¼ö¸¦ ÀÛ¼ºÇ϶ó. ÇÔ¼ö ÀÚü´Â ¸®ÅÏ°ªÀÌ ¾ø¾îµµ ¹«¹æÇÏ´Ù.
±âº»ÇüÀº ¹°·ÐÀÌ°í Æ÷ÀÎÅÍ¿¡ ´ëÇؼµµ ·¹ÆÛ·±½º¸¦ ¼±¾ðÇÒ ¼ö ÀÖ´Ù. º°
½Ç¿ë¼ºÀº ¾øÁö¸¸ ¹è¿À̳ª ÇÔ¼ö¿¡ ´ëÇÑ ·¹ÆÛ·±½ºµµ °¡´ÉÇÏ´Ù. ±×·¯³ª ¸ðµç ŸÀÔ¿¡ ´ëÇÑ ·¹ÆÛ·±½º¸¦ ´Ù ¼±¾ðÇÒ
¼ö ÀÖ´Â °ÍÀº ¾Æ´Ï¸ç ÀϺΠºÒ°¡´ÉÇÑ Çü½Äµµ ÀÖ´Ù.
¡á ·¹ÆÛ·±½º¿¡ ´ëÇÑ ·¹ÆÛ·±½º´Â
¼±¾ðÇÒ ¼ö ¾ø´Ù. ·¹ÆÛ·±½º°¡ º°¸íÀε¥ º°¸í¿¡ ´ëÇØ ¶Ç ´Ù¸¥ º°¸íÀ» ºÙÀÌ´Â °ÍÀº ½Ç¿ëÀû °¡Ä¡°¡ ¾ø±â ¶§¹®ÀÌ´Ù. Æ÷ÀÎÅÍ´Â 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Çü ¹è¿µµ Ç×»ó
°¡´ÉÇÏÁö¸¸ ·¹ÆÛ·±½º¿¡ ´ëÇؼ´Â ¿¹¿Ü°¡ Àû¿ëµÈ´Ù. ¹®¹ýÀûÀ¸·Î ºÒ°¡´ÉÇؼ°¡ ¾Æ´Ï¶ó ½Ç¿ë¼ºÀÌ ¾ø±â ¶§¹®¿¡
±ÝÁöÇÑ´Ù.
ÇÔ¼ö°¡ ·¹ÆÛ·±½º ŸÀÔÀ» ¸®ÅÏÇÒ ¼öµµ ÀÖ´Ù. ÀÌ·¸°Ô µÇ¸é ¸®ÅϵǴ ´ë»óÀÌ
Áº¯°ªÀÇ º°¸íÀÌ´Ù º¸´Ï ÇÔ¼ö È£Ãâ¹®¿¡ °ªÀ» ´ëÀÔÇÏ´Â °ÍÀÌ °¡´ÉÇØÁø´Ù.
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 ÇÔ¼ö´Â Á¶°Ç¿¡ ¸Â´Â ¿ä¼Ò¸¦ ã¾Æ ±× ¿ä¼Ò ÀÚü¸¦
¸®ÅÏÇϸç È£Ãâ¿øÀº ¸®ÅÏµÈ ·¹ÆÛ·±½º¿¡ °ð¹Ù·Î °ªÀ» ´ëÀÔÇÑ´Ù. ÇÔ¼ö¸¦ ´ëÀÔ½ÄÀÇ Áº¯¿¡ ¾µ ¼ö ÀÖ´Ù´Â °ÍÀº
¹«Ã´ Èï¹Ì·ÓÁö¸¸ ±âÁ¸ÀÇ ÄÚµå¿Í ÀÌÁúÀûÀÌ°í Á÷°ü¼ºÀÌ ¶³¾îÁö¹Ç·Î ÀÚÀçÇÏ´Â °ÍÀÌ ÁÁ´Ù. ±×·¯³ª ´ÙÀ½¿¡ ¹è¿ï
¿¬»êÀÚ ¿À¹ö·Îµù¿¡´Â ÀÌ ±â¹ýÀÌ ²À ÇÊ¿äÇÏ´Ù.
·¹ÆÛ·±½º´Â ±²ÀåÈ÷ Ư¼öÇÏ°í ½Å±âÇØ º¸ÀÌÁö¸¸ ³»ºÎ¸¦ µé¿©´Ù º¸¸é Æ÷ÀÎÅÍÀÇ º¯Çü¿¡ ºÒ°úÇÏ´Ù. ÄÄÆÄÀÏ·¯´Â ·¹ÆÛ·±½º¸¦ Æ÷ÀÎÅÍ·Î ¹Ù²ã ÄÄÆÄÀÏÇÏ¸ç ³»ºÎ ±¸Çöµµ Æ÷ÀÎÅÍ·Î µÇ¾î ÀÖ´Ù. ÀÌ ÀýÀÇ Ã¹ ¹ø° ¿¹Á¦´Â ³»ºÎÀûÀ¸·Î ´ÙÀ½°ú °°ÀÌ ÄÄÆÄÀϵȴÙ.
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; |
´ë»óüÀÇ ¹øÁö¸¦ ¸®ÅÏÇϸç È£Ãâ¹®Àº * ¿¬»êÀÚ¸¦ Àû¿ëÇÏ¿© ¸®ÅÏµÈ ´ë»óü¸¦
°¡¸®Å²´Ù. ÇÔ¼ö°¡ ¸®ÅÏÇÏ´Â °ÍÀº °á±¹ ¹øÁö¶ó´Â °ªÀÌÁö¸¸ ÀÌ ¹øÁö¿¡ *
¿¬»êÀÚ°¡ ¾Ï½ÃÀûÀ¸·Î Àû¿ëµÇ¾î Áº¯°ªÀÌ µÇ¹Ç·Î ÇÔ¼ö È£Ãâ¹®ÀÌ Áº¯¿¡ ¿Ã ¼ö ÀÖ´Ù.
°á±¹ ·¹ÆÛ·±½º´Â ÄÄÆÄÀÏ·¯°¡ ³»ºÎ¿¡¼ Àý¹¦ÇÏ°Ô Á¶ÀÛÇÏ´Â ±â¸¸ÀûÀÎ Æ÷ÀÎÅÍÀÏ »ÓÀÌ´Ù.
ÇÏÁö¸¸ ·¹ÆÛ·±½º´Â ÁÖ¼Ò¸¦ ÀÐ°í ³»¿ëÀ» ¾×¼¼½ºÇÏ´Â &, * ¿¬»êÀÚ¸¦ ºÙÀÌ´Â °úÁ¤ÀÌ
ÀÚµ¿ÈµÇ¾î ÀÖ¾î Äڵ尡 °£°áÇØÁö´Â ÀÌÁ¡ÀÌ ÀÖ´Ù. Æ÷ÀÎÅÍ¿¡ ´ëÇØ ¾Ï½ÃÀû ¿¬»êÀÚ¸¦ ºÙ¿© ÀÏ¹Ý º¯¼öó·³ ¾µ
¼ö ÀÖ°Ô ÇØ ÁÖ´Â ÆíÀǹ®¹ýÀÌ´Ù.
´çÀåÀº ·¹ÆÛ·±½º°¡ ¿Ö ÇÊ¿äÇÑÁö °¨À» Àâ±â ¾î·Æ°ÚÁö¸¸ ¿©±â¼´Â º°¸íÀ̶ó´Â °Í¸¸ ÀÌÇØÇÏ°í ³Ñ¾î°¡ÀÚ. Ŭ·¡½º°¡ ¿ÏÀüÇÑ Å¸ÀÔÀÌ µÇ±â À§Çؼ´Â ±â´É »Ó¸¸ Çü½Ä±îÁöµµ ±âº» ŸÀÔ°ú ÀÏÄ¡½ÃÄÑ¾ß ÇÒ ÇÊ¿ä°¡ Àִµ¥ º¹»ç »ý¼ºÀÚ³ª
¿¬»êÀÚ ¿À¹ö·Îµù¿¡ ·¹ÆÛ·±½º°¡ À¯¿ëÇÏ°Ô »ç¿ëµÈ´Ù.