´ÙÀ½Àº ¶È°°Àº µ¿ÀÛÀ» Ç쵂 ÂüÁ¶ È£Ãâ ¹æ½ÄÀ¸·Î º¯¼ö°ªÀ» 1 Áõ°¡½ÃŰ´Â plusref ÇÔ¼ö¸¦ ÀÛ¼ºÇØ º¸ÀÚ. ¼Ò½º´Â ´ÙÀ½°ú °°´Ù.
|
¿¹ Á¦ : CallRef |
#include <Turboc.h>
void plusref(int *a);
void main()
{
int i;
i=5;
plusref(&i);
printf("°á°ú=%d\n",i);
}
void plusref(int *a)
{
*a=*a+1;
}
¾ÕÀÇ ¿¹Á¦¿Í °á°ú´Â °°Áö¸¸ µ¿ÀÛÇÏ´Â ¹æ½ÄÀº »ó´çÈ÷ ´Ù¸£´Ù. plusref ÇÔ¼öÀÇ ¿øÇüÀÌ ¹Ù²î¾ú°í main ÇÔ¼öÀÇ Áß°£ º¯¼ö j°¡ ¾ø¾îÁ³´Ù. ÂüÁ¶ È£ÃâÀº ½ÇÀμöÀÇ °ªÀ» Àü´ÞÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó ½ÇÀμöÀÇ ¹øÁö¸¦ Àü´ÞÇÏ´Â ¹æ½ÄÀÌ´Ù. &i´Â i°¡ µé¾î ÀÖ´Â ¹øÁöÀε¥ ÀÌ ¹øÁö¸¦ plusref ÇÔ¼ö·Î Àü´ÞÇß´Ù. plusref ÇÔ¼ö´Â ÀÌ ¹øÁö¸¦ a·Î ¹Þ¾Æ¼ ´ÙÀ½ ¿¬»êÀ» ¼öÇàÇÑ´Ù.
*a=*a+1;
ÀÌ ¿¬»ê½Ä¿¡¼ *a¶õ a°¡ °¡¸®Å°°í ÀÖ´Â ¹øÁö¿¡ µé¾î ÀÖ´Â °ªÀ» °¡¸®Å²´Ù. a°¡ &i¸¦ ´ëÀÔ¹Þ¾ÒÀ¸¹Ç·Î *a´Â *(&i)¶ó°í ÇÒ ¼ö ÀÖÀ¸¸ç *(&i)´Â °ð ½ÇÀμö i¿Í °°´Ù. *a¸¦ 1Áõ°¡½ÃÄ×À¸¹Ç·Î ÀÌ ¿¬»ê½Ä¿¡ ÀÇÇØ Áõ°¡µÇ´Â ´ë»óÀº ½ÇÀμö iÀÌ´Ù. Áï, *a=*a+1; ¿¬»ê¹®Àº °á±¹ i=i+1;°ú °°¾ÆÁö´Â °ÍÀÌ´Ù. ÀÌ ÇÔ¼öÀÇ µ¿ÀÛÀ» ±×¸²À¸·Î Ç¥ÇöÇÏ¸é ´ÙÀ½°ú °°´Ù.

main¿¡¼ iÀÇ ¹øÁö¸¦ ³Ñ°å°í ±× ¹øÁö°ªÀ» a·Î ¹Þ¾Æ a°¡ °¡¸®Å°´Â ¸Þ¸ð¸®ÀÇ °ªÀ» 1 Áõ°¡½ÃÄ×À¸¹Ç·Î °á±¹ 1Áõ°¡µÈ °ÍÀº ½ÇÀμö iÀÌ´Ù. ÇÔ¼ö ³»ºÎ¿¡¼ Æ÷ÀÎÅ͸¦ ÅëÇØ ½ÇÀμö°ªÀ» Á÷Á¢ Á¶ÀÛÇϱ⠶§¹®¿¡ °á°ú°ªÀ» ¸®ÅÏÇÒ Çʿ䰡 ¾øÀ¸¸ç ±×·¡¼ plusref ÇÔ¼ö´Â voidÇüÀ̰í main¿¡¼ ÀÌ ÇÔ¼öÀÇ ¸®ÅϰªÀ» ´ëÀÔ¹Þ±â À§ÇÑ j°¡ ÇÊ¿ä¾ø¾îÁø °ÍÀÌ´Ù. µÎ ¿¹Á¦ÀÇ 1Áõ°¡½ÃŰ´Â ÇÔ¼öµéÀÇ µ¿ÀÛÀ» ºñ±³ÇØ º¸ÀÚ.
¢º plusone ÇÔ¼ö : °ªÀ» ³Ñ±â¸é 1Áõ°¡µÈ °ªÀ» ¸®ÅÏÇÑ´Ù.
¢º plusref ÇÔ¼ö : °ªÀÌ µé¾îÀÖ´Â ¹øÁö¸¦ ÁÖ¸é ÀÌ ¹øÁö¿¡ µé¾îÀÖ´Â °ªÀ» 1Áõ°¡½ÃŲ´Ù.
¿äÄÁµ¥ °ª È£Ãâ ¹æ½ÄÀ» »ç¿ëÇÏ´Â plusone ÇÔ¼ö´Â 1´õ ¸¹Àº °ªÀ» °è»êÇϰí ÂüÁ¶ È£Ãâ ¹æ½ÄÀ» »ç¿ëÇÏ´Â plusref ÇÔ¼ö´Â ½ÇÀμö¸¦ Á÷Á¢ 1Áõ°¡½ÃŲ´Ù. °ª È£ÃâÀ̶ó´Â ¸»Àº ½ÇÀμö·Î °ª(Value)¸¦ ³Ñ±ä´Ù´Â ¶æÀ̰í ÂüÁ¶ È£ÃâÀ̶ó´Â ¸»Àº ¹øÁö°ªÀ» Àü´Þ¹Þ¾Æ ½ÇÀμö¸¦ Á÷Á¢ ÂüÁ¶(reference)ÇÒ ¼ö ÀÖ´Ù´Â ¶æÀÌ´Ù.
°ª È£Ãâ°ú ÂüÁ¶ È£ÃâÀÇ ¶Ç ´Ù¸¥ Â÷ÀÌÁ¡Àº ½ÇÀμö·Î »ó¼ö¸¦ Àü´ÞÇÒ ¼ö Àִ°¡ ÇÏ´Â Á¡ÀÌ´Ù. °ª È£Ãâ ¹æ½ÄÀº °ªÀ» Àü´ÞÇϱ⠶§¹®¿¡ plusone(5)¿Í °°ÀÌ »ó¼ö¸¦ ½ÇÀμö·Î »ç¿ëÇÒ ¼ö ÀÖ´Ù. iµç kµç 5³ª 3ÀÌµç °ªÀ» °¡Áö±â¸¸ Çϸé Çü½ÄÀμö a°¡ ÀÌ °ªÀ» ´ëÀÔ¹ÞÀ» ¼ö ÀÖ´Ù. ½ÉÁö¾î i*k+1°°Àº ¼ö½Äµµ °è»êµÈ ÈÄ¿¡´Â °ªÀ¸·Î Æò°¡µÇ¹Ç·Î ÀÌ °ªÀ» Àü´ÞÇÒ ¼ö ÀÖ´Ù. ±×·¯³ª ÂüÁ¶ È£ÃâÀº ¹øÁö¸¦ Àü´ÞÇϱ⠶§¹®¿¡ ¹øÁö¸¦ °¡Áö´Â º¯¼ö¸¸ »ç¿ëÇÒ ¼ö ÀÖÀ¸¸ç »ó¼ö´Â »ç¿ëÇÒ ¼ö ¾ø´Ù. »ó¼ö´Â ¸Þ¸ð¸®¸¦ Á¡À¯Çϰí ÀÖÁö ¾Ê±â ¶§¹®¿¡ ¹øÁö°¡ ¾ø´Ù. Áï, »ó¼ö´Â Áº¯°ªÀÌ ¾Æ´Ï¸ç ÂüÁ¶ È£Ãâ ÇÔ¼öÀÇ ½ÇÀμö·Î´Â Áº¯°ª¸¸ »ç¿ëÇÒ ¼ö ÀÖ´Ù.
¸¸¾à plusref(&5)¿Í °°ÀÌ »ó¼öÀÇ ¹øÁö¸¦ ³Ñ±â°í ½Í´Ù°í ÇØ º¸ÀÚ. 5¶ó´Â »ó¼ö´Â Áº¯°ªÀÌ ¾Æ´Ï¹Ç·Î &5¶ó´Â Ç¥ÇöºÎÅͰ¡ ¹ú½á À߸øµÈ °ÍÀÌ´Ù. 5´Â ¸Þ¸ð¸®¿¡ ÀúÀåµÈ °ªÀÌ ¾Æ´Ï¹Ç·Î ¹øÁö°¡ ¾ø°í »ó¼ö 5´Â ¾îµð±îÁö³ª »ó¼ö 5ÀÏ »ÓÀÌÁö ¾î¶² ¹æ¹ýÀ» ¾²´õ¶óµµ ÀÌ °ªÀº 6À̳ª 4°¡ µÉ ¼ö´Â ¾ø´Ù.
°ª È£Ãâ°ú ÂüÁ¶ È£Ãâ ¹æ½Ä¿¡ ´ëÇØ °£´ÜÇÑ ¿¹Á¦¸¦ ÅëÇØ ¾Ë¾Æº¸¾Ò´Âµ¥ ÀÌ Ã¥À» Àд »ç¶÷ÀÇ 57%´Â ÀÌÇØ¸¦ ÇßÀ» °ÍÀ̰í 43%´Â ¾ÆÁ÷µµ ÀÌÇØ°¡ ¾ÈµÉ °ÍÀÌ´Ù. C ÀÔ¹®ÀÚ¿¡°Ô ÂüÁ¶ È£ÃâÀ̶ó´Â °³³äÀº »ç½Ç ¼±¶æ ÀÌÇØµÉ¸¸Å ½±Áö ¾ÊÀºµ¥ ¿Ö³ÄÇÏ¸é ¾ÆÁ÷±îÁöµµ Æ÷ÀÎÅÍ¿¡ ´ëÇØ È®½ÇÈ÷ ÀÌÇØ¸¦ ¸øÇϰí Àֱ⠶§¹®ÀÌ´Ù. ¾ÆÁ÷µµ ÀÌÇØ°¡ °¡Áö ¾Ê´Â´Ù¸é ¾Õ ÀåÀ¸·Î µ¹¾Æ°¡ Æ÷ÀÎÅÍÀÇ °³³ä¿¡ ´ëÇØ ´Ù½Ã ÇÑ ¹ø ´õ ÀÐ¾î º¸±â ¹Ù¶õ´Ù. ±×¸®°í ´ÙÀ½ ¿¹Á¦¸¦ º¸¸é °ª È£Ãâ°ú ÂüÁ¶ È£Ãâ¿¡ ´ëÇØ Á» ´õ ºÐ¸íÇÏ°Ô ÀÌÇØÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù.
|
¿¹ Á¦ : ValueRef |
#include <Turboc.h>
void main()
{
int i,icopy;
int *pi;
i=5;
icopy=i;
icopy=icopy+1;
printf("i=%d, icopy=%d\n",i,icopy);
i=5;
pi=&i;
*pi=*pi+1;
printf("i=%d, *pi=%d\n",i,*pi);
}
ÀÌ ¿¹Á¦´Â º¯¼ö i¿¡ µé¾îÀÖ´Â °ªÀ» icopy¿¡ ´ëÀÔÇÑ ÈÄ¿¡ Áõ°¡½ÃÄÑ º¸°í Æ÷ÀÎÅ͸¦ ÅëÇØ¼µµ Áõ°¡½ÃÄÑ º¸´Â ½ÇÇèÀ» ÇÑ´Ù. ½ÇÀμö°¡ Çü½Ä Àμö·Î Àü´ÞµÇ´Â °úÁ¤Àº ÀÏÁ¾ÀÇ ´ëÀÔ ¿¬»êÀ̹ǷΠÀÌ ¿¹Á¦´Â ÇÔ¼öÀÇ µÎ °¡Áö È£Ãâ ¹æ½ÄÀ» ±×´ë·Î Èä³»³»°í ÀÖ´Ù. ½ÇÇà °á°ú´Â ´ÙÀ½°ú °°´Ù.
i=5, icopy=6
i=6, *pi=6
¸ÕÀú °ª È£ÃâÀ» Èä³»³»´Â À§ÂÊÀÇ Äڵ带 º¸ÀÚ. i´Â 5·Î ÃʱâȵǾú°í icopy¿¡ i ¸¦ ´ëÀÔÇßÀ¸¹Ç·Î icopyµµ 5°¡ µÉ °ÍÀÌ´Ù. ÀÌ »óÅ¿¡¼ icopy¸¦ 1Áõ°¡½Ã۸é icopy¸¸ 6ÀÌ µÇ°í i´Â ¿©ÀüÈ÷ 5ÀÇ »óŸ¦ À¯ÁöÇÑ´Ù. i°ªÀ» ´ëÀÔ¹ÞÀº icopy°¡ ¾îÂî µÈ´Ù°í ÇØ¼ i°¡ ¿µÇâÀ» ¹ÞÁö´Â ¾ÊÀ¸¹Ç·Î i¸¦ Á÷Á¢ º¯°æÇÏÁö ¾Ê´Â ÇÑÀº i°ªÀÌ ¹Ù²îÁö ¾Ê´Â °ÍÀÌ ´ç¿¬ÇÏ´Ù.
¾Æ·¡ÂÊ ÄÚµå´Â ÂüÁ¶ È£ÃâÀ» Èä³»³»´Âµ¥ Æ÷ÀÎÅÍ º¯¼ö pi¿¡ iÀÇ ¹øÁö¸¦ ´ëÀÔÇÑ ÈÄ ÀÌ ¹øÁö¿¡ µé¾î ÀÖ´Â °ªÀ» 1Áõ°¡½ÃÄ×´Ù. pi°¡ iÀÇ ¹øÁö¸¦ °¡¸®Å°°í ÀÖÀ¸¹Ç·Î piÀÇ ³»¿ëÀ» ¹Ù²Ù¸é i°¡ º¯°æµÈ´Ù. ±×·¡¼ i³ª *pi³ª µÑ ´Ù 6ÀÌ µÈ´Ù. »ç½Ç i¿Í *pi´Â ¿ÏÀüÈ÷ °°Àº ´ë»óÀ» °¡¸®Å°¹Ç·Î °°Àº °ªÀ» °¡Áú ¼ö¹Û¿¡ ¾ø´Ù. ¸¸¾à ÀÌ ¿¹Á¦Á¶Â÷µµ ÀÌÇØ°¡ °¡Áö ¾Ê´Â´Ù¸é ¾î¿ ¼ö°¡ ¾ø´Ù. ´ÙÀ½¿¡ Æ÷ÀÎÅÍ¿¡ ´ëÇØ Á» ´õ Àͼ÷ÇØÁø ÈÄ ÂüÁ¶ È£ÃâÀ» ´Ù½Ã ¿¬±¸ÇØ º¸±â ¹Ù¶õ´Ù.
´ÙÀ½Àº plusref ÇÔ¼öÀÇ ¿øÇü¿¡ ´ëÇÑ ºÎ¿¬ ¼³¸íÀÌ´Ù. ÀÌ ÇÔ¼öÀÇ ¿øÇüÀº plusref(int *a)À̰í main¿¡¼ ÀÌ ÇÔ¼ö¸¦ È£ÃâÇÒ ¶§´Â plusref(&i)¿Í °°ÀÌ iÀÇ ¹øÁö¸¦ ³Ñ°å´Ù. Àμö·Î Á¤¼öÇüÀÇ Æ÷ÀÎÅÍ(int *)¸¦ ¿ä±¸ÇϹǷΠÀÌ ÇÔ¼ö¸¦ È£ÃâÇÒ ¶§ Á¤¼öÇü º¯¼öÀÇ ¹øÁö¸¦ Àü´ÞÇÏ´Â °ÍÀÌ Áö±ØÈ÷ ´ç¿¬ÇÏ´Ù. ÇÏÁö¸¸ Ãʺ¸ÀÚµéÀº ÀÌ·± Å͹«´Ï¾ø´Â Àǹ®À» °¡Áö±âµµ ÇÑ´Ù. "½ÇÀμö·Î Á¤¼öÇü º¯¼öÀÇ ¹øÁö°ªÀ» ³Ñ°å´Âµ¥ ¹ÞÀ» ¶§´Â ¿Ö *a¿Í °°ÀÌ ±× ¹øÁö¿¡ µé¾îÀÖ´Â °ªÀ¸·Î ¹Þ´Â°¡?"¶ó´Â °ÍÀÌ´Ù. ÀÌ·± ¿ÀÇØÀÇ ½Ã¹ßÁ¡Àº plusref(int *a) ¿øÇü¿¡ ÀÖ´Â *±âÈ£¸¦ ¿¬»êÀÚ·Î »ý°¢ÇÏ´Â °ÍÀε¥ ¿©±â¼ »ç¿ëµÈ *´Â "¹øÁöÀÇ ³»¿ëÀ» Àоî¶ó"´Â ¿¬»êÀÚ°¡ ¾Æ´Ï¶ó Æ÷ÀÎÅÍ º¯¼öÀÓÀ» ³ªÅ¸³»´Â ±¸µÎÁ¡ÀÌ´Ù. ¿¬»êÀÚ¿Í ±¸µÎÁ¡À» ºÐ¸íÈ÷ ±¸ºÐÇÒ ¼ö ÀÖ°í int *°¡ ÇϳªÀÇ µ¥ÀÌÅÍ Å¸ÀÔÀ̶ó´Â °ÍÀ» ÀÌÇØÇÑ´Ù¸é ÀÌ·± ¿ÀÇØ´Â ÇÏÁö ¾Ê°Ô µÉ °ÍÀÌ´Ù.