Áõ°¨ ¿¬»êÀº »ç¿ë ºóµµ°¡ ³ô¾Æ CPUµµ ±â°è¾î Â÷¿øÀÇ Áõ°¨ ¸í·ÉÀ»
º°µµ·Î Á¦°øÇÑ´Ù. ¾î¶² °ª¿¡ 1À» ´õÇØ ´Ù½Ã ´ëÀÔÇÏ´Â a = a + 1(¾î¼Àºí¸®¾î·Î ADD [a], 1)º¸´Ù °ªÀ» 1 Áõ°¡½ÃÅ°´Â a++(¾î¼Àºí¸®¾î·Î
INC [a])°¡ ÈξÀ ºü¸£°í ¸í··¾îµµ ª´Ù. ´ÙÇàÈ÷ C
¾ð¾î Â÷¿ø¿¡¼´Â ÄÄÆÄÀÏ·¯°¡ a = a + 1À» a++·Î
¹Ù²ã ÄÄÆÄÀÏÇÒ Á¤µµ·Î ¶È¶ÈÇϱ⠶§¹®¿¡ º° Â÷ÀÌ°¡ ¾ø´Ù.
Áõ°¨ ¿¬»êÀÚ´Â ±× ´ç½Ã ´Ù¸¥ ¾ð¾î¿¡´Â ¾ø´Â µ¶Æ¯ÇÑ ¿¬»êÀÚ¿´À¸¸ç ¿¹»ó¿Ü·Î Æí¸®ÇÏ°í È¿À²ÀûÀÌ¾î¼ C¾ð¾îÀÇ ´ëÁßÈ¿¡ Å« ±â¿©¸¦ Çß´Ù. ±×·¯³ª º¹ÀâÇÑ ¼ö½Ä ³»¿¡¼ Áõ°¨
¿¬»êÀÚ¸¦ »ç¿ëÇϸé Áõ°¨ ¼ø¼°¡ ¾Ö¸ÅÇØÁ® ¶æÇÏÁö ¾ÊÀº ºÎÀÛ¿ëÀÌ ¹ß»ýÇϱ⵵ ÇÑ´Ù. ´ÙÀ½ ¿¹Á¦ÀÇ ½ÇÇà °á°ú¸¦
¿¹ÃøÇØ º¸ÀÚ.
#include <stdio.h>
int main()
{
int i
= 3;
printf("%d,
%d\n", i, ++i);
}
3ÀÇ °ªÀ» °¡Áö´Â i¸¦
µÎ ¹ø Ãâ·ÂÇ쵂 ÇѹøÀº ±×³É Ãâ·ÂÇÏ°í ÇѹøÀº ÀüÀ§ÇüÀ¸·Î i¸¦ Áõ°¡½ÃÄÑ Ãâ·ÂÇß´Ù. ´ëºÎºÐ 3, 4¸¦ ¿¹»óÇÏ°ÚÁö¸¸ ½ÇÁ¦ °á°ú´Â 4, 4ÀÌ´Ù. ÀÌ·¸°Ô µÇ´Â ÀÌÀ¯´Â
C´Â Àμö¸¦ Àü´ÞÇÒ ¶§ µÚÂÊ ÀμöºÎÅÍ Àü´ÞÇϱ⠶§¹®ÀÌ´Ù. ++i°¡ ¸ÕÀú ½ÇÇàµÇ¾î 4°¡ Àü´ÞµÇ°í ´ÙÀ½À¸·Î ÀÌ¹Ì 4°¡ µÇ¾î ¹ö¸° i¸¦ Àü´ÞÇÑ´Ù.
C Ç¥ÁØ¿¡ Àμö Àü´Þ ¼ø¼´Â ÁöÁ¤µÇ¾î ÀÖÁö ¾ÊÀ¸¸ç(Unspecified) ´ëºÎºÐÀÇ
ÄÄÆÄÀÏ·¯´Â °¡º¯ Àμö¸¦´Ù·ç±â À§ÇØ µÚÂÊ ÀμöºÎÅÍ Àü´ÞÇÑ´Ù. ÄÄÆÄÀÏ·¯¸¶´Ù Àμö Àü´Þ ¼ø¼°¡ ´Ù¸£±â ¶§¹®¿¡
¼ö½Ä³»¿¡¼ ++ ¿¬»êÀÚ¸¦ »ç¿ëÇϸé À̽ļº¿¡ ºÒ¸®ÇÏ´Ù. ÀÌ·±
°ñÄ¡¾ÆÇ ¹®Á¦¸¦ ½Å°æ¾²±â ½ÈÀ¸¸é ¼ö½Ä ³»¿¡¼ Áõ°¨ ¿¬»êÀÚ¸¦ ¾²Áö ¸»°í ÆòÀÌÇÏ°Ô Ç®¾î¼ ¾²´Â °ÍÀÌ ÁÁ´Ù.
int i
= 3;
printf("%d,
",i);
++i; // ¶Ç´Â i++;
printf("%d\n",i);
Äڵ尡 Á» ±æ¾îÁöÁö¸¸ ÀǵµÇÑ´ë·Î Àß ½ÇÇàµÇ¸ç ºÎÀÛ¿ëµµ ¾ø°í ³²ÀÌ ºÁµµ Äڵ带 ½±°Ô Çؼ®ÇÒ ¼ö ÀÖ´Ù. ´ÙÀ½ ¼ö½ÄÀ» º¸ÀÚ.
b = (++a + 1) * a++;
b = a++ + ++a;
µÎ ½Ä ¸ðµÎ ¹®¹ýÀûÀ¸·Î ¾Æ¹« ¹®Á¦°¡ ¾øÀ¸¸ç ¾ö°ÝÈ÷ µûÁ® º¸¸é °á°ú¸¦ ¿¹ÃøÇÒ ¼öµµ ÀÖ´Ù. ±×·¯³ª ¹º°¡ ºÒ¾ÈÇØ º¸ÀÌ°í ¾î¶² Àǵµ·Î ÀÛ¼ºÇÑ ÄÚµåÀÎÁö ÇÑ´«¿¡ ¾Ë¾Æº¸±â ¾î·Æ´Ù. ÀÌ·± ÄÚµå´Â ÄÄÆÄÀÏ·¯¸¶´Ù Æò°¡ ¹æ¹ýÀÌ ´Þ¶ó À̽ļº¿¡µµ ºÐ¸®ÇÏ´Ù.
Çö¶õÇÏ°í º¹ÀâÇÑ Äڵ带 ¾´´Ù°í Çؼ ½Ç·ÂÀÌ ÁÁÀº °ÍÀº ¾Æ´Ï¸ç ¿ÀÈ÷·Á È£±â½É¿¡ °¡µæÂù öºÎÁö Ãʺ¸ÀÚ°¡ Á¦ ¸Ú¿¡
°Ü¿ö ÀÌ·± Äڵ带 Áñ°Ü ¾´´Ù. °æÇèÀÖ´Â °³¹ßÀÚ´Â °¡±ÞÀû Äڵ带 ´Ü¼øÇÏ°Ô ÀÛ¼ºÇϸç Àб⠾î·Á¿î Äڵ带
¾²Áö ¾Ê´Â´Ù.
´ëÀÔ ¿¬»êÀÚ = °ú °ü°è ¿¬»êÀÚ
== Àº ¸ð¾çÀÌ ºñ½ÁÇÏÁö¸¸ µ¿ÀÛÀº ¿ÏÀüÈ÷ ´Þ¶ó ÁÖÀÇ°¡ ÇÊ¿äÇÏ´Ù. ´ÙÀ½ µÎ ¹®ÀåÀ» º¸ÀÚ.
a = a + 1;
a == a + 1;
À§ÀÇ ¹®ÀåÀº aÀÇ °ª¿¡ 1À»
´õÇØ ´Ù½Ã a¿¡ ´ëÀÔÇÑ´Ù´Â ¶æÀ̸ç ÈçÈ÷ ¸¹ÀÌ ¾²´Â ¹®ÀåÀÌ´Ù. ±×·¯³ª
¾Æ·¡ÂÊÀÇ ¹®ÀåÀº a¿Í a + 1ÀÌ °°ÀºÁö ºñ±³Ç϶ó´Â ¹®ÀåÀ̸ç 1Àº 0ÀÌ ¾Æ´Ï¾î¼ Ç×»ó °ÅÁþÀÌ´Ù.
Á¶°Ç¹®À» ¾µ ¶§ µÎ ¿¬»êÀÚ¸¦ Àß ±¸ºÐÇØ¾ß ÇÑ´Ù.
printf("Á¤¼ö¸¦ ÀÔ·ÂÇϼ¼¿ä :
");
scanf("%d",&i);
if (i = 7)
printf("7À»
ÀÔ·ÂÇß½À´Ï´Ù.\n");
°ªÀ» ÀÔ·Â ¹ÞÀº ÈÄ if (i == 7)·Î ºñ±³ÇØ¾ß Çϴµ¥ if (i = 7)·Î ´ëÀÔÇÏ´Â ½Ç¼ö¸¦ Çß´Ù. ¹®Á¦´Â ÀÌ Äڵ尡 ÇÕ¹ýÀ̶ó
¿¡·¯°¡ ¹ß»ýÇÏÁö ¾Ê´Â´Ù´Â Á¡ÀÌ´Ù. ´ëÀÔ ¿¬»êÀÚ´Â i¿¡ 7À» ´ëÀÔÇÑ ÈÄ ±× °á°ú¸¦ ¸®ÅÏÇϸç 7Àº 0ÀÌ ¾Æ´Ï¹Ç·Î ÀÌ Á¶°ÇÀº Ç×»ó ÂüÀÌ´Ù. C´Â º°µµÀÇ ÁøÀ§ÇüÀÌ ¾ø¾î
Á¤¼ö¸¦ Á¶°Ç½ÄÀ¸·Î »ç¿ëÇÏ¸ç ´ëÀÔ ¿¬»êÀÚ´Â Á¤¼ö¸¦ ¸®ÅÏÇÏ´Ï ¹®¹ýÀûÀ¸·Î ¹®Á¦°¡ ¾ø´Ù.
Àǵµ¿Í´Â ´Ù¸£°Ô Äڵ带 ÀÛ¼ºÇßÁö¸¸ ¿¡·¯´Â °í»çÇÏ°í °æ°í Çϳªµµ ¹ß»ýÇÏÁö ¾Ê´Â´Ù.
ÀÌ·± Äڵ带 ¹Ìó ¹ß°ßÇÏÁö ¸øÇÏ¸é ³ªÁß¿¡ ½É°¢ÇÑ ¿¡·¯ÀÇ ¿øÀÎÀÌ µÇ±âµµ ÇÑ´Ù. µÎ ¿¬»êÀÚ¸¦
È¥µ¿Çؼ »ç¿ëÇÏ´Â °æ¿ì´Â Ãʺ¸ÀÚ»Ó¸¸ ¾Æ´Ï¶ó ¼÷·ÃÀÚ¿¡°Ôµµ ºó¹øÈ÷ ÀϾÙ. ±×·¡¼ º¯¼ö¿Í »ó¼ö¸¦ ºñ±³ÇÒ
¶§ ´ÙÀ½ Çü½ÄÀ¸·Î ¾²±âµµ ÇÑ´Ù.
if (7 == i)
== ¿¬»êÀÚ´Â ±³È¯¹ýÄ¢ÀÌ ¼º¸³ÇÏ¸ç °ªÀ» ¹Ù²ÙÁö ¾ÊÀ¸¹Ç·Î Áº¯¿¡ »ó¼ö°¡
¿À°í ¿ìº¯¿¡ º¯¼ö°¡ ¿Íµµ »ó°ü¾ø´Ù. ¸¸¾à ¿¬»êÀÚ¸¦ À߸ø »ç¿ëÇÏ¿© if
(7 = i)·Î ¾²¸é ÄÄÆÄÀÏ·¯°¡ Áï½Ã 7Àº Áº¯°ªÀÌ ¾Æ´Ï¶ó´Â ¿¡·¯ ¸Þ½ÃÁö¸¦ Ãâ·ÂÇÏ¸ç °³¹ßÀÚ´Â
Áï½Ã ÀÚ½ÅÀÇ ½Ç¼ö¸¦ ¾Ë¾Æä°í À߸øµÈ Äڵ带 ¼öÁ¤ÇÒ ¼ö ÀÖ´Ù. º¸±â¿¡ Á¶±Ý ¾î»öÇÏÁö¸¸ ½Ç¼ö¸¦ ¹Ì¿¬¿¡ ¹æÁöÇÒ
¼ö ÀÖ¾î ¸¹ÀÌ ¾Ö¿ëÇÏ´Â ÄÚµåÀÌ´Ù.
¿À·¡µÈ ¼Ò½º¿¡ ÀÌ·± Äڵ尡 º¸ÀÌ¸é ´ç½Ã¿¡´Â ½Ç¼ö ¹æÁö¸¦ À§ÇØ ÈçÈ÷ »ç¿ëÇß´ø ±â¹ý Á¤µµ·Î ÀÌÇØÇÏ¸é µÈ´Ù. ±×·¯³ª ÃÖ±ÙÀÇ ÄÄÆÄÀÏ·¯´Â °æ°í ¼öÁØÀ» ³ôÀ̸é Á¶°Ç¹®¿¡ ´ëÀÔ½ÄÀ» ½èÀ» ¶§ °æ°í·Î ó¸®ÇÏ´Â ±â´ÉÀÌ ÀÖ¾î °ú°Å¿¡
ºñÇؼ´Â ´ú À§ÇèÇØÁ³´Ù.
CÀÇ ³í¸® ¿¬»êÀÚ´Â ¼Óµµ Çâ»ó°ú ¾ÈÀüÀ» À§ÇØ ºÒÇÊ¿äÇÑ ¿¬»êÀº ÇÏÁö
¾Ê´Â´Ù. º¯¼ö a°¡ 5 ~
10ÀÇ ¹üÀ§¿¡ ÀÖ´ÂÁö Á¡°ËÇÏ·Á¸é µÎ °³ÀÇ Á¶°ÇÀ» &&·Î ¿¬°áÇؼ µ¿½Ã¿¡ Á¡°ËÇؾß
ÇÑ´Ù. ³í¸® ¿¬»êÀÚÀÇ ÇÇ¿¬»êÀÚ´Â ¿ÞÂʺÎÅÍ Æò°¡µÈ´Ù.
if (a > 5 && a < 10)
¿ì¼± Áº¯À» Æò°¡ÇÏ¿© a°¡ 5º¸´Ù
Å«Áö Á¡°ËÇÑ´Ù. a°¡ 5º¸´Ù Å©´Ù¸é Àüü½ÄÀÇ Áø¸® ÆÇ´ÜÀ»
À§ÇØ ¿ìº¯ÀÇ Á¶°Ç½ÄÀ» ´õ Á¡°ËÇØ º¸°ÚÁö¸¸ ±×·¸Áö ¾Ê´Ù¸é ¿ìº¯Àº ¾Æ¿¹ Æò°¡ÇÒ ÇÊ¿ä°¡ ¾ø´Ù. ¿¹¸¦ µé¾î a°¡ 2¶ó¸é ÀÌ°ªÀº 5º¸´Ù
Å©Áö ¾ÊÀ¸¹Ç·Î ù ¹ø° Á¶°ÇºÎÅÍ °ÅÁþÀÌ´Ù. Áº¯ÀÇ Á¶°ÇÀÌ °ÅÁþÀÌ¸é ¿ìº¯ÀÇ ÁøÀ§¿Í´Â »ó°ü¾øÀÌ Àüü½ÄÀº
ÀÌ¹Ì °ÅÁþÀ¸·Î °áÁ¤µÇ¾úÀ¸¹Ç·Î ¿ìº¯Àº Æò°¡ÇÒ ÇÊ¿ä°¡ ¾ø´Ù.
|| ¿¬»êÀÚµµ ¸¶Âù°¡ÁöÀÌ´Ù. if
(a == 3 || b == 5) Á¶°Ç¹®À» Æò°¡ÇÒ ¶§ a°¡ 3À̶ó¸é Áº¯ÀÌ ÂüÀ̹ǷΠ¿ìº¯ÀÇ ÁøÀ§ ¿©ºÎ¿¡ »ó°ü¾øÀÌ Àüü Á¶°Ç½ÄÀÇ °ªÀº ÀÌ¹Ì ÂüÀ¸·Î °áÁ¤³µ´Ù. bÀÇ °ªÀÌ ¹«¾ùÀÎÁö º¼ ÇÊ¿ä¾øÀÌ Àüü½ÄÀ» ÂüÀ¸·Î ÆÇÁ¤ÇÏ¸é µÈ´Ù.
&& ¿¬»êÀÚ´Â Áº¯ÀÌ °ÅÁþÀ̸é Àüü¸¦ °ÅÁþÀ¸·Î Æò°¡Çϸç || ¿¬»êÀÚ´Â Áº¯ÀÌ
ÂüÀ̸é Àüü¸¦ ÂüÀ¸·Î Æò°¡ÇÑ´Ù.
ÀÌ¹Ì °áÁ¤³ °ª¿¡ ´ëÇØ ºÒÇÊ¿äÇÑ ¿¬»êÀ» »ý·«ÇÔÀ¸·Î½á ½ÇÇà ¼Óµµ¸¦ ³ôÀÌ´Â ±â¹ýÀ» ¼îÆ® ¼Å°Æ®(Short Circuit)¶ó°í ÇÑ´Ù. ÄÄÆÄÀÏ·¯¿¡ µû¶ó Áö¿ø ¿©ºÎ°¡
´Ù¸¥µ¥ ´ëºÎºÐÀÇ ÄÄÆÄÀÏ·¯´Â Áö¿øÇÑ´Ù. ±×±ö Á¶°Ç¹® Çϳª »ý·«ÇÏ´Â°Ô ¾ó¸¶³ª Â÷ÀÌ°¡ ÀÖÀ»±î ½Í°ÚÁö¸¸ ¿ìº¯ÀÌ
ÇÔ¼ö È£Ãâ¹®À» ¶§´Â ±²ÀåÇÑ Â÷ÀÌ°¡ ÀÖÀ¸¸ç ¾ÈÀü¼º¿¡µµ Å« ¿ªÇÒÀ» ÇÑ´Ù. ´ÙÀ½ Á¶°Ç¹®À» º¸ÀÚ.
if (a != 0 && b/a == 3) ¸í·É;
a°¡ 0ÀÌ ¾Æ´Ï°í b¸¦ a·Î ³ª´« °ªÀÌ 3ÀÏ
¶§ ¸í·ÉÀ» ½ÇÇàÇÏ´Â ¹®ÀåÀÌ´Ù. a°¡ 0À̶ó¸é Áº¯ÀÌ °ÅÁþÀ̹ǷÎ
¼îÆ® ¼Å°Æ®¿¡ ÀÇÇØ b/a ¿¬»ê½ÄÀº ¾Æ¿¹ Æò°¡µÇÁöµµ ¾Ê´Â´Ù. ¼îÆ®
¼Å°Æ® ±â´ÉÀÌ ¾ø´Ù¸é a°¡ 0ÀÎ »óÅ¿¡¼ b/a ¿¬»êÀ» ÇÏ°Ô µÇ¾î Ä¡¸íÀûÀÎ ¿¹¿Ü°¡ ¹ß»ýÇÑ´Ù. ±×·¡¼ b¸¦ a·Î ³ª´©±â Àü¿¡ a°¡ 0ÀÌ ¾Æ´Ï¶ó´Â Á¶°ÇÀ» ¸ÕÀú Á¡°ËÇÏ¿© ¿¹¿Ü¸¦ ÇÇÇØ°¡µµ·Ï Çß´Ù. À§ Äڵ带
Ç®¾î¾²¸é ´ÙÀ½°ú °°´Ù.
if (a != 0) {
if
(b/a == 3) ¸í·É;
}
¼îÆ® ¼Å°Æ®´Â ÄÄÆÄÀÏ·¯°¡ ¾Ë¾Æ¼ Àû¿ëÇϹǷΠ°³¹ßÀÚ°¡ ±»ÀÌ ¸ô¶óµµ »ó°ü¾ø´Ù. ±×·¯³ª
ÀÌ ±â´ÉÀ» Àß ÀÌ¿ëÇØ ¸ÔÀ¸¸é ´õ È¿À²ÀûÀÎ Äڵ带 ÀÛ¼ºÇÒ ¼ö ÀÖ´Ù. ³í¸® ¿¬»êÀÚ´Â ±³È¯ ¹ýÄ¢ÀÌ ¼º¸³ÇϹǷÎ
Á¿ì Á¶°Ç½ÄÀ» ¹Ù²Ù¾îµµ °á°ú´Â Ç×»ó °°´Ù. ±×·¯³ª Áº¯ÀÌ ¿ìº¯ÀÇ ½ÇÇà Á¶°ÇÀÌ µÇ´Â °æ¿ì´Â Á¶°ÇÀÇ ³ª¿
¼ø¼¿¡ ½Å°æ½á¾ß ÇÑ´Ù. ´ÙÀ½ ÄÚµå´Â ¾ÆÁÖ À§ÇèÇÏ´Ù.
if (b/a == 3 && a != 0) ¸í·É;
Á¡°ËÇÏ´Â Á¶°Ç¿¡ µû¶ó Æò°¡ ½Ã°£¿¡¼ Â÷ÀÌ°¡ ÀÖÀ» °æ¿ì °£ÆíÇÑ ÂÊÀ» ¿ÞÂÊ¿¡ ¹èÄ¡ÇØ¾ß ÇÑ´Ù. ¿¹¸¦ µé¾î A Á¶°ÇÀº ´Ü¼øÈ÷ º¯¼ö°ª¸¸ Æò°¡Çϸç B Á¶°ÇÀº Áö±¸ ¹Ý´ëÆí¿¡ ÀÖ´Â À¥ ¼¹ö°¡ µ¿ÀÛÇÏ´ÂÁö Á¡°ËÇÑ´Ù°í ÇØ º¸ÀÚ. ÀÌ
µÎ Á¶°ÇÀ» ³í¸® ¿¬»êÀÚ·Î ¿¬°áÇÒ ¶§´Â (A && B)³ª
(A || B)·Î ¾²´Â °ÍÀÌ À¯¸®ÇÏ´Ù.
¼ø¼¸¦ ¹Ù²Ù¾î B Á¶°ÇÀ» ¸ÕÀú Á¡°ËÇÏ¸é °á°ú´Â °°¾Æµµ ½ÇÇà ½Ã°£ÀÌ
³¶ºñµÈ´Ù. (B && A) Á¶°Ç½ÄÀÇ ÁøÀ§ ÆÇ´ÜÀ» À§ÇØ À¥ ¼¹ö¿¡ Á¢¼ÓÇÏ¿© µ¿ÀÛÇÏ°í ÀÖ´Ù´Â
°ÍÀ» ¾Ë¾Æ ³Â´Âµ¥ A°¡ °ÅÁþÀ̶ó¸é B¸¦ Æò°¡ÇÏ´Â ½Ã°£¸¸ ¹ö¸°
¼ÀÀÌ´Ù. ½±°Ô Á¶»çÇÒ ¼ö ÀÖ´Â Á¶°ÇÀÌ ¸ÕÀú ¿Í¾ß ÇÑ´Ù. ¶Ç
¹Ýµå½Ã ½ÇÇàÇØ¾ß ÇÒ Á¶°Çµµ ¾ÕÂÊ¿¡ ¹èÄ¡ÇØ¾ß ÇÑ´Ù.
if (a == 8 || (ch=getch()) != ' ') {
switch
(ch) {
....
}
}
¿ø·¡ Àǵµ´Â a°¡ 8À̰ųª
ÀԷ¹ÞÀº ¹®ÀÚ ch°¡ °ø¹éÀÌ ¾Æ´Ï¸é ch°ª¿¡ µû¶ó ºÐ±âÇÏ´Â
±¸Á¶ÀÌ´Ù. ÀÌ Äڵ忡¼ a°¡ 8À̸é getch´Â ¾Æ¿¹ È£ÃâµÇÁö ¾ÊÀ¸¹Ç·Î ch´Â ¾²·¹±â°ªÀ» °¡Áö°í ÀÌÈÄÀÇ µ¿ÀÛÀº ¿¹ÃøÇÒ ¼ö ¾ø´Ù. getch´Â
¹Ýµå½Ã È£ÃâµÇ¾î¾ß ÇϹǷΠÁ¶°Ç¹®ÀÇ ¼ø¼¸¦ ¹Ù²Ù¾î¾ß ÇÏ¸ç ±×º¸´Ù´Â ch = getch() È£Ãâ¹®À» if¹® ÀÌÀüÀ¸·Î »©¼ ´Ü¼øÈÇÏ´Â °ÍÀÌ´Ù.
void ** ŸÀÔÀº ½ÇÀü¿¡¼ »ç¿ë ºóµµ°¡ ³·¾Æ ½Ç¿ë¼ºÀº º°·Î ¾øÁö¸¸
Æ÷ÀÎÅÍÀÇ ÀÌÇصµ¸¦ ³ôÀÌ´Â ÇмúÀû °¡Ä¡°¡ ÀÖ´Â ÁÖÁ¦ÀÌ´Ù. void **¸¦ È®½ÇÇÏ°Ô ÀÌÇØÇß´Ù¸é Æ÷ÀÎÅÍ´Â
°ÅÀÇ Á¤º¹Çß´Ù°í »ý°¢Çصµ »ó°ü¾øµÇ ¸ð¸¥´Ù°í Çؼ °ÆÁ¤ÇÒ ÇÊ¿ä´Â ¾ø´Ù. ½Ç¹«¸¦ ÇÏ´Ù º¸¸é ÀÚ¿¬½º·´°Ô ÀÌÇصÉ
¶§°¡ ¿Ã °ÍÀÌ´Ù.
void **´Â void *ŸÀÔÀ»
°¡¸®Å°´Â À¯µµ ŸÀÔÀÌ´Ù. void **vpp; ·Î ¼±¾ðÇÑ vppÀÇ
´ë»óü´Â ÀÓÀÇÀÇ ´ë»óÀ» °¡¸®Å°´Â void *ŸÀÔÀÇ º¯¼öÀÌ´Ù. ºñ½ÁÇØ
º¸ÀÌÁö¸¸ void *¿Í´Â ´Þ¸® °¡¸®Å°´Â ´ë»óüÀÇ Å¸ÀÔÀÌ void *·Î
Á¤ÇØÁ® ÀÖ°í ´ë»óüÀÇ Å©±âµµ ¸íÈ®ÇÏ°Ô ¾Ë°í ÀÖ´Ù. µû¶ó¼ vpp´Â voidÇü Æ÷ÀÎÅÍ¿¡ Àû¿ëµÇ´Â ±ÔÄ¢ ´ë½Å ÀÏ¹Ý Æ÷ÀÎÅÍÀÇ ±ÔÄ¢ÀÌ Àû¿ëµÈ´Ù.
ÀÓÀÇ Å¸ÀÔÀÇ Æ÷ÀÎÅ͸¦ ´ëÀÔ¹ÞÀ» ¼ö ¾ø°í ¹Ýµå½Ã void *Çü º¯¼öÀÇ
¹øÁö¸¸ ´ëÀÔ¹ÞÀ» ¼ö ÀÖ´Ù. ¶ÇÇÑ ´ë»óü°¡ Á¤ÇØÁ® ÀÖÀ¸¹Ç·Î *¿¬»êÀÚ·Î
Àаųª º¯°æÇÒ ¼ö ÀÖ°í ++, --, +n ¿¬»êÀ¸·Î ¾Õ µÚ ¿ä¼Ò·Î À̵¿ÇÒ ¼ö ÀÖÀ¸¸ç °°Àº void ** ŸÀÔ³¢¸® ´ëÀÔ, ºñ±³,
»¬¼Àµµ °¡´ÉÇÏ´Ù. ´ÙÀ½ ¿¹Á¦¸¦ ÅëÇØ vpp¿Í vppÀÇ ´ë»óü¿¡ ´ëÇØ ¿¬±¸ÇØ º¸ÀÚ.
#include <stdio.h>
int main()
{
void
*vp;
void
*av[5];
void
**vpp;
int i,
*pi = &i;
vpp =
&vp; //
°¡´É
vpp =
av; // °¡´É
vpp++; //
°¡´É
*vpp; //
°¡´É
vpp =
π //
ºÒ°¡´É
**vpp; //
ºÒ°¡´É
}
void **·Î ¼±¾ðµÈ vpp°¡
´ëÀÔ¹ÞÀ» ¼ö ÀÖ´Â °ªÀº void *Çü º¯¼öÀÎ vpÀÇ ¹øÁö, void * ¹è¿ avÀÇ ¼±µÎ ¹øÁö µîÀÌ´Ù. int **ppi°¡ int *piÀÇ ¹øÁö³ª int *ar[5] ¹è¿À» ´ëÀÔ¹ÞÀ» ¼ö ÀÖ´Â °Í°ú °°´Ù. vpp°¡ void *ÇüÀÇ av ¹è¿À» °¡¸®Å°´Â »óȲÀº ´ÙÀ½°ú °°´Ù.
av ¹è¿ÀÇ °¢ ¿ä¼Ò´Â void *
ŸÀÔÀ̹ǷΠÀÓÀÇ Å¸ÀÔÀÇ º¯¼ö¿¡ ´ëÇÑ ¹øÁö¸¦ °¡Áø´Ù. µû¶ó
av ¹è¿ ¿ä¼Ò°¡ °¡¸®Å°´Â °ªÀ» ÀÐÀ¸·Á¸é ij½ºÆ® ¿¬»êÀÚ°¡ ÀÖ¾î¾ß Çϸç ++, -- ¿¬»êµµ
Àû¿ëÇÒ ¼ö ¾ø´Ù. ÇÏÁö¸¸ vpp°¡ °¡¸®Å°´Â ´ë»óü´Â void *·Î Á¤ÇØÁ® ÀÖ¾î ij½ºÆ® ¿¬»êÀÚ¾øÀÌ *vpp·Î ¿ä¼ÒÀÇ °ªÀ»
ÀÐÀ» ¼ö ÀÖ°í Æ÷ÀÎÅÍ´Â ºÎÈ£¾ø´Â 4¹ÙÀÌÆ® ±æÀ̸¦ °¡Áö¹Ç·Î vpp ÀÚü¸¦
Áõ°¡½ÃÄÑ avÀÇ ´ÙÀ½ ¿ä¼Ò·Î À̵¿ÇÒ ¼öµµ ÀÖ´Ù.
void *´Â ÀÓÀÇ º¯¼öÀÇ ¹øÁö¸¦ ´ëÀÔ¹ÞÀ» ¼ö ÀÖÁö¸¸ void **´Â ÀÓÀÇ Æ÷ÀÎÅÍÀÇ ¹øÁö¸¦ ´ëÀÔ¹ÞÀ» ¼ö ¾ø´Ù. voidÇü
ÀÌÁß Æ÷ÀÎÅÍ°¡ °¡¸®Å°´Â ´ë»óü´Â void *·Î °íÁ¤ÀûÀÌ¾î¼ int *Çü
º¯¼öÀÎ piÀÇ ¹øÁö¸¦ ´ëÀÔ¹ÞÀ» ¼ö´Â ¾ø´Ù. ÀÌ°Ô °¡´ÉÇÏ´Ù¸é **vpp·Î Á¤¼ö°ªÀ» ÀÐÀ» ¼ö ÀÖ¾î¾ß Çϴµ¥ vpp°¡ °¡¸®Å°´Â Æ÷ÀÎÅÍÀÇ
´ë»óü°¡ Á¤ÇØÁ® ÀÖÁö ¾Ê¾Æ ÀÌ ¿¬»êÀº ºÒ°¡´ÉÇÏ´Ù. ÀÓÀÇÀÇ Æ÷ÀÎÅ͸¦ °¡¸®Å°´Â º¯¼öÀÇ Å¸ÀÔÀº ¿©ÀüÈ÷ void *ÀÌ´Ù.
void *´Â ÀÓÀÇÀÇ Å¸ÀÔÀ» ¸ðµÎ °¡¸®Å³ ¼ö Àִµ¥ Æ÷ÀÎÅÍ Å¸ÀÔµµ
Æ÷ÇԵǸç Æ÷ÀÎÅÍ º¯¼öµµ ¹øÁö°¡ ÀÖÀ¸´Ï Æ÷ÀÎÅÍÀÇ ¹øÁö¸¦ void * º¯¼ö°¡ °¡¸®Å³ ¼ö ÀÖ´Ù. void *vp°¡ int *pi¸¦ °¡¸®Å°´Â »óÅ¿¡¼ ´ë»óü¸¦ Àаí
½Í´Ù¸é **(int **)vp·Î vp¸¦ Á¤¼öÇü ÀÌÁß Æ÷ÀÎÅÍ·Î
ij½ºÆÃÇÑ ÈÄ *¸¦ µÎ ¹ø Àû¿ëÇÏ¿© pi°¡ °¡¸®Å°´Â °ªÀ» Àд´Ù.
*vpp·Î ´ë»óüÀÎ void *¸¦
Àд °ÍÀº °¡´ÉÇÏÁö¸¸ **vpp·Î vpp°¡ °¡¸®Å°´Â Æ÷ÀÎÅÍÀÇ
´ë»óü¸¦ ÀÐÁö´Â ¸øÇÑ´Ù. *vpp·Î ÀÐÀº void *ÀÇ ´ë»óü
ŸÀÔÀ» ¾Ë ¼ö ¾ø±â ¶§¹®ÀÌ´Ù. Á¤ ÀаíÀÚ ÇÑ´Ù¸é *(int
*)*vpp Çü½ÄÀ¸·Î ÀÏ´Ü void *¸¦ Àаí Æ÷ÀÎÅ͸¦ ¿øÇϴ ŸÀÔÀ¸·Î ij½ºÆÃÇؼ ´Ù½Ã * ¿¬»êÀÚ¸¦ Àû¿ëÇÑ´Ù. ´ÙÀ½ ¿¹Á¦´Â
void *ÀÇ Çö½ÇÀûÀÎ »ç¿ë¿¹ÀÌ´Ù.
#include <stdio.h>
#include <malloc.h>
void alloc(void **mem, size_t size)
{
*mem =
malloc(size);
}
int main()
{
void
*vp;
alloc(&vp,
sizeof(int));
*(int
*)vp = 1234;
printf("%d\n",
*(int *)vp);
free(vp);
}
¸Þ¸ð¸®¸¦ ´ë½Å ÇÒ´çÇØ ÁÖ´Â ÇÔ¼ö¸¦ ¸¸µé ¶§ ÀÌ ÇÔ¼ö°¡ ¹Þ¾Æ¾ß ÇÒ ÀμöÀÇ Å¸ÀÔÀÌ
void **ÀÌ´Ù. ¿¹Á¦ÀÇ alloc ÇÔ¼ö´Â mallocÀ» ´Ü¼øÈ÷ È£Ã⸸ ÇÏÁö¸¸ º¹ÀâÇÑ ¿¬»êÀ» ÅëÇØ ÇÊ¿äÇÑ ¸Þ¸ð¸®¾çÀ» °è»êÇϰųª ÇÒ´ç ÈÄ Ãß°¡ µ¿ÀÛÀ» ÇÒ
¼öµµ ÀÖ´Ù. main¿¡¼ µ¿Àû ÇÒ´çµÈ ¸Þ¸ð¸®ÀÇ ¹øÁö¸¦ ÀúÀåÇϱâ À§ÇØ
void *ÇüÀÇ vp¸¦ ¼±¾ðÇÏ°í ÀÌ º¯¼ö¸¦ ÂüÁ¶ È£Ãâ·Î ³Ñ±â±â À§ÇØ &vp·Î Àü´ÞÇÑ´Ù. ±×·¯¹Ç·Î
alloc ÇÔ¼öÀÇ Àμö´Â void **ÀÏ ¼ö¹Û¿¡ ¾ø´Ù.
µ¿Àû ÇÒ´çÀ» ÅëÇØ ½ÇÇàÁß¿¡ ¿øÇÏ´Â Å©±âÀÇ ¹è¿À» »ý¼ºÇÒ ¼ö ÀÖ´Ù. int
ar[5]·Î Á¤Àû ¼±¾ðÇÏ´Â ¹®ÀåÀÇ Å©±â 5¸¦ ½ÇÇàÁß¿¡ ÇÊ¿äÇѸ¸Å ÁöÁ¤ °¡´ÉÇÏ´Ù. ±×·¸´Ù¸é 2Â÷¿ø ¹è¿µµ µ¿ÀûÀ¸·Î ÇÒ´çÇÒ ¼ö ÀÖÀ»±î? ÀÌ ³»¿ëÀº ´Ù¼Ò ÀÌ·ÐÀûÀ̶ó ½Ç¿ë¼ºÀº ¶³¾îÁö¸ç ±»ÀÌ ¸ô¶óµµ »ó°ü¾øÁö¸¸ ¹è¿°ú Æ÷ÀÎÅÍ¿¡ ´ëÇÑ ÀÌ·ÐÀûÀÎ ¿¬±¸¸¦ À§ÇÑ
ÇмúÀûÀÎ ÁÖÁ¦¿©¼ ¿¬±¸ÇØ º¼ °¡Ä¡°¡ ÀÖ´Ù.
char ar[3][4] ¼±¾ð¹®ÀÇ »ó¼ö 3°ú 4¸¦ ½ÇÇàÁß¿¡ ¿øÇÏ´Â Å©±â´ë·Î °áÁ¤ÇÏ°í ½Í´Ù°í ÇÏÀÚ. À̸¸ÅÀÇ ¸Þ¸ð¸®¸¦ ¸¸µé·Á¸é malloc(3 * 4 * sizeof(char))
È£Ãâ·Î 12¹ÙÀÌÆ®¸¦ ÇÒ´çÇÏ¸é µÈ´Ù. ¹®Á¦´Â mallocÀÌ ¸®ÅÏÇÏ´Â Æ÷ÀÎÅ͸¦ ¾î¶² ŸÀÔÀÇ º¯¼ö·Î ¹Þ¾Æ¾ß Çϴ°¡ÀÌ´Ù.
mallocÀº ¾îÂ÷ÇÇ void *¸¦ ¸®ÅÏÇϹǷΠ¿øÇϴ ŸÀÔÀ¸·Î ij½ºÆà °¡´ÉÇÏ´Ù. ÀÏ´Ü ´ÙÀ½°ú °°ÀÌ ÇØ º¸ÀÚ.
char *p = (char *)malloc(3 * 4 * sizeof(char));
¹è¿ÀÇ ÃÖÁ¾ ¿ä¼Ò°¡ char ŸÀÔÀ̹ǷΠchar *·Î ¹Þ¾Ò´Ù. ±×·¯³ª ÀÌ·¸°Ô ÇÒ´çÇÑ ¹è¿Àº ±æÀÌ 12ÀÇ ¹®ÀÚÇü ÀÏÂ÷ ¹è¿ÀÌÁö 2Â÷¿ø ¹è¿ÀÌ ¾Æ´Ï´Ù. ¿ø·¡ ÇÒ´çÇÏ·Á°í Çß´ø char[3][4]´Â ±æÀÌ 4ÀÇ ¹®ÀÚ¿ 3°³¸¦ ÀǵµÇÑ °ÍÀÌ¾î¼ ¸Þ¸ð¸® Å©±â¸¸ °°À» »Ó ¸ð¾çÀÌ
´Ù¸£´Ù. ÀÌ ¹è¿À» µ¿ÀûÀ¸·Î ÇÒ´çÇÏ·Á¸é ¹è¿ Æ÷ÀÎÅÍ·Î ¹Þ¾Æ¾ß ÇÑ´Ù.
#include <stdio.h>
#include <malloc.h>
#include <string.h>
int main()
{
char(*p)[4]
= (char(*)[4])malloc(3 * 4 * sizeof(char));
strcpy(p[0],
"dog");
strcpy(p[1],
"cow");
strcpy(p[2],
"cat");
for
(int i = 0; i<3; i++) puts(p[i]);
free(p);
}
dog
cow
cat
Å©±â 4ÀÇ ¹®ÀÚÇü ¹è¿À» °¡¸®Å°´Â ŸÀÔÀ» Å©±â 3À¸·Î ÇÒ´çÇß´Ù. °¢ ºÎºÐ ¹è¿¿¡ ¹®ÀÚ¿ÀÌ Àß ÀúÀåµÇ´ÂÁö 3±ÛÀÚÀÇ ¹®ÀÚ¿À» º¹»çÇÏ°í ´Ù½Ã Ãâ·ÂÇØ È®ÀÎÇß´Ù. ÀÌ ¿¹Á¦¿¡¼ ÇÒ´çÇÑ p´Â char ar[3][4] ¹è¿À» µ¿ÀûÀ¸·Î ÇÒ´çÇÑ °ÍÀ̸ç 2Â÷¿ø ¹è¿°ú ÀÚ°ÝÀÌ °°´Ù.
±×·¯³ª ÀÌ ¿¹Á¦°¡ ÇÒ´çÇÑ p´Â »ç½Ç
2Â÷¿ø ¹è¿ÀÌ ¾Æ´Ï¶ó pÀÇ ºÎºÐ ¹è¿ Å©±â°¡ ÄÄÆÄÀÏÁß¿¡ °áÁ¤µÇ¾ú±â ¶§¹®¿¡ 1Â÷¿ø ¹è¿¿¡ ´õ °¡±õ´Ù. ¹è¿ ÀÚüÀÇ Å©±âÀÎ 3Àº ½ÇÇàÁß¿¡ ¸¶À½´ë·Î ÁöÁ¤ÇÒ ¼ö ÀÖ¾î º¯¼ö³ª »ç¿ëÀÚ°¡ ÀÔ·ÂÇÑ °ªÀ» ¾µ ¼ö ÀÖ´Ù. ±×·¯³ª ¹è¿ ŸÀÔÀÇ Å©±âÀÎ 4´Â º¯¼ö¸¦ ¾µ ¼ö ¾ø´Ù. ´ÙÀ½ Äڵ带 º¸ÀÚ.
int n = 3,m = 4;
char (*p)[m] = (char (*)[m])malloc(n * m * sizeof(char));
free(p);
ÀÌ·¸°Ô ÇØ¾ß ÁøÁ¤ÇÑ µ¿Àû ÇÒ´çÀÌÁö¸¸ ¾ÈŸ±õ°Ôµµ ÀÌ ÄÚµå´Â ÄÄÆÄÀϵÇÁö ¾Ê´Â´Ù. ¿Ö³ÄÇϸé
¹è¿ Æ÷ÀÎÅÍÀÇ ºÎºÐ ¹è¿ Å©±â´Â »ó¼ö·Î¸¸ ÁÙ ¼ö Àֱ⠶§¹®ÀÌ´Ù. char (*p)[m] ¼±¾ð¹®ºÎÅÍ ¿¡·¯ÀÌ´Ù. p°¡ Æ÷ÇÔÇÒ ºÎºÐ ¹è¿ÀÇ Å©±â´Â ½ÇÇàÁß¿¡ °áÁ¤ÇÒ ¼ö ¾øÀ¸¸ç ÄÄÆÄÀÏÇÒ ¶§ ¹Ì¸® °áÁ¤ÇØ¾ß ÇÑ´Ù. ¸ðµç Æ÷ÀÎÅÍ´Â ´ë»óüÀÇ Å©±â¸¦ ¾Ë¾Æ¾ß Çϴµ¥ p´Â ´ë»óü Å©±â¸¦
¾Ë ¼ö ¾ø´Ù. ÀÌ Äڵ尡 ÄÄÆÄÀϵÇÁö ¾Ê´Â ÀÌÀ¯´Â int ar[m]ÀÌ
ÄÄÆÄÀϵÇÁö ¾Ê´Â ÀÌÀ¯¿Í °°´Ù.
±×·¡¼ p´Â 2Â÷¿ø ¹è¿ÀÌ
¾Æ´Ï¶ó Å©±â°¡ Á¤ÇØÁø 1Â÷¿ø ¹è¿À» ¿ä¼Ò·Î °¡Áö´Â 1Â÷¿ø
¹è¿, Áï ¹è¿ÀÇ ¹è¿ÀÌ´Ù. µÎ ÷ÀÚÀÇ Å©±â¸¦ ½ÇÇàÁß¿¡ ¸¶À½´ë·Î
º¯°æÇÒ ¼ö ¾ø¾î 2Â÷¿ø ¹è¿À» ÇÒ´çÇÑ °ÍÀº ¾Æ´Ï´Ù. »ç¿ëÀÚ
Á¤ÀÇ Å¸ÀÔÀ» Á¤ÀÇÇÑ ÈÄ ÇÒ´çÇØ º¸¸é À̸¦ ºÐ¸íÈ÷ È®ÀÎÇÒ ¼ö ÀÖ´Ù.
typedef char c4[4];
c4 *p=(c4 *)malloc(3 * sizeof(c4));
c4¸¦ Å©±â 4ÀÇ ¹®ÀÚÇü
¹è¿ ŸÀÔÀ¸·Î Á¤ÀÇÇÏ°í p´Â c4ÀÇ 1Â÷¿ø ¹è¿·Î µ¿Àû ÇÒ´çÇß´Ù. p ¹è¿ÀÇ Å©±âÀÎ 3Àº ½ÇÇàÁß¿¡ °áÁ¤ÇÒ ¼ö ÀÖÁö¸¸ c4 ¼±¾ð¹®ÀÇ 4´Â ŸÀÔÀÇ ÀϺο©¼ ÄÄÆÄÀÏÁß¿¡ °áÁ¤µÇ´Â »ó¼ö¿©¾ß ÇÑ´Ù. ¿ø·¡ ÀǵµÇß´ø´ë·Î
µÎ ÷ÀÚ¸¦ ½ÇÇàÁß¿¡ ÀÚÀ¯·Ó°Ô ÁöÁ¤ÇÏ·Á¸é ÀÌÁß Æ÷ÀÎÅ͸¦ »ç¿ëÇØ¾ß ÇÑ´Ù.
#include <stdio.h>
#include <malloc.h>
#include <string.h>
int main()
{
int n
= 3, m = 4;
char
**p;
p =
(char **)malloc(n * sizeof(char *));
for
(int i = 0; i < n; i++) {
p[i]
= (char *)malloc(m * sizeof(char));
}
strcpy(p[0],
"dog");
strcpy(p[1],
"cow");
strcpy(p[2],
"cat");
for
(int i = 0; i < n; i++) puts(p[i]);
for
(int i = 0; i < n; i++) {
free(p[i]);
}
free(p);
}
¹®ÀÚÇü ÀÌÁß Æ÷ÀÎÅÍ p¸¦ ¼±¾ðÇÏ°í
p¸¦ ¸ÕÀú µ¿Àû ÇÒ´çÇÑ´Ù. À̶§ p ÀÚüÀÇ Å©±â´Â
º¯¼ö·Î ÁöÁ¤ÇÒ ¼ö ÀÖÀ¸¸ç 3À¸·Î Á¤ÀÇµÈ nÀ» Àû¿ëÇß´Ù. ÀÌ ÇÒ´ç¿¡ ÀÇÇØ p´Â Å©±â 3ÀÇ
¹®ÀÚ¿ Æ÷ÀÎÅÍ ¹è¿ÀÌ µÈ´Ù. p¸¦ ÇÒ´çÇÑ ÈÄ pÀÇ °¢ ¿ä¼Ò¸¦
´Ù½Ã µ¿Àû ÇÒ´çÇ쵂 À̶§´Â mÀÇ Å©±â¸¸Å ÇÒ´çÇÑ´Ù. µÎ ÷ÀÚ n°ú mÀÌ ¸ðµÎ º¯¼öÀ̹ǷΠ½ÇÇàÁß¿¡
2Â÷¿ø ¹è¿ÀÇ Æø°ú ³ôÀ̸¦ ¿øÇϴ´ë·Î ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù. p°¡ ¸Þ¸ð¸®¿¡ »ý¼ºµÈ ¸ð¾çÀº ´ÙÀ½°ú
°°´Ù.
ºÎºÐ ¹è¿ÀÌ Èð¾îÁ® ÀÖÁö¸¸ ½ÇÇàÁß¿¡ ÇÒ´çÇÑ 2Â÷ ¹è¿À̸ç Á¤ÀûÀ¸·Î
ÇÒ´çµÈ char[3][4]¿Í ÀÚ°ÝÀÌ °°´Ù. ±×·¯³ª ¿ÏÀüÈ÷
°°Áö´Â ¾Ê´Âµ¥ Á¤Àû ¹è¿Àº ºÎºÐ ¹è¿ÀÌ ¸ðµÎ ÀÏÁ¤ÇÑ Á÷»ç°¢Çü ¹è¿ÀÌÁö¸¸ ÀÌÁß Æ÷ÀÎÅ͸¦ »ç¿ëÇÑ ¹è¿Àº ºÎºÐ ¹è¿ÀÇ Å©±â¸¦ °¢°¢ ´Ù¸£°Ô ÁöÁ¤ÇÒ ¼ö
ÀÖ´Â ·¡±âµå ¹è¿ÀÌ´Ù.
¿ø·¡ÀÇ ³íÀÇ·Î µ¹¾Æ°¡ ÀÌÂ÷¿ø ¹è¿À» µ¿ÀûÀ¸·Î ÇÒ´çÇÒ ¼ö Àִ°¡¿¡ ´ëÇÑ ÁøÀ§ ¿©ºÎ¸¦ °¡·Á º¸ÀÚ. ¹®¹ýÀûÀÎ ¸é¿¡¼¸¸ º¸¸é µÎ ÷ÀÚÀÇ Å©±â¸¦ ½ÇÇàÁß¿¡ °áÁ¤ÇÒ ¼ö ¾ø¾î ÀÌÂ÷¿ø ¹è¿À» Çѹø¿¡ ÇÒ´çÇÏ´Â °ÍÀº ºÒ°¡´ÉÇÏ´Ù. ÇÏÁö¸¸ ½Ç¹«ÀûÀÎ ¸é¿¡¼ º¸¸é ÀÌÂ÷ ¹è¿Ã³·³ µ¿ÀÛÇÏ´Â ÀÌÁß Æ÷ÀÎÅÍ·Î µ¿ÀÏÇÑ ÇüÅÂÀÇ ¹è¿À» ¸¸µé ¼ö´Â ÀÖ¾î °¡´ÉÇÏ´Ù°í
º¼ ¼öµµ ÀÖ´Ù.
¹è¿¸íÀº ¹è¿ÀÇ ½ÃÀÛ ¹øÁö¸¦ °¡¸®Å°´Â Æ÷ÀÎÅÍ »ó¼öÀÌ¸ç ¹è¿ÀÇ ½ÃÀÛ À§Ä¡¸¦ ¾Ë°í ½Í´Ù¸é º°µµÀÇ ¿¬»êÀÚ¾øÀÌ ¹è¿
À̸§À» »ç¿ëÇÑ´Ù. ¿¹¸¦ µé¾î int ar[5]·Î ¼±¾ðµÈ ¹è¿ÀÇ
¼±µÎ ¹øÁö¸¦ Á¤¼öÇü Æ÷ÀÎÅÍ¿¡ ´ëÀÔÇÏ°í ½Í´Ù¸é int *pi = ar;·Î ¹Ù·Î ´ëÀÔÇÏ¸é µÈ´Ù.
±×·¸´Ù¸é ¹è¿¸í¿¡ & ¿¬»êÀÚ¸¦ ºÙÀÎ &arÀº ¾î¶² Àǹ̰¡ ÀÖÀ»±î? arÀº Æ÷ÀÎÅÍ »ó¼öÀÌ¸ç »ó¼ö´Â
¹øÁö¸¦ °¡ÁöÁö ¾Ê¾Æ & ¿¬»êÀÚ¸¦ ¾µ ¼ö ¾ø´Â °ÍÀÌ ¿øÄ¢ÀÌ¸ç ½ÇÁ¦ Ŭ·¡½Ä C¿¡¼ &arÀº ¿¡·¯·Î 󸮵Ǿú´Ù. ±×·¯³ª ANSI C ÀÌÈÄ¿¡´Â ¹è¿ÀÌ &ÀÇ ÇÇ¿¬»êÀÚ°¡ µÉ ¶§ »ó¼ö°¡ ¾Æ´Ñ ¹è¿ ±× ÀÚü¸¦ °¡¸®Å°µµ·Ï º¯°æµÇ¾î
&ar Ç¥ÇöÀÌ °¡´ÉÇØÁ³´Ù. ar°ú &arÀÌ
¾î¶»°Ô ´Ù¸¥Áö ¿¬±¸ÇØ º¸ÀÚ.
int ar[5] = {1, 2, 3, 4, 5};
printf("%p\n", ar);
printf("%p\n", &ar);
Å©±â 5ÀÇ Á¤¼öÇü ¹è¿ arÀ»
¼±¾ðÇØ µÎ°í ar°ú &arÀÇ ½ÇÁ¦ ¹øÁö¸¦ Ãâ·ÂÇß´Ù. ¸Þ¸ð¸® »óȲ¿¡ µû¶ó À§Ä¡´Â ´Þ¶óÁöÁö¸¸ µÎ ¹øÁö°¡ °°´Ù´Â °ÍÀº È®ÀÎÇÒ ¼ö ÀÖ´Ù.
±×·¸´Ù°í Çؼ ar°ú &arÀÇ ÀÚ°ÝÀÌ
°°Àº °ÍÀº ¾Æ´Ï´Ù.
int ar[5] = {1, 2, 3, 4, 5};
int *pi;
pi = ar; //
°¡´É
pi = &ar; //
¿¡·¯
Á¤¼öÇü Æ÷ÀÎÅÍ pi´Â arÀ»
´ëÀÔ¹ÞÀ» ¼ö ÀÖÁö¸¸ &arÀº ´ëÀÔ¹ÞÀ» ¼ö ¾ø´Ù. ´ëÀÔÀÌ
¾ÈµÈ´Ù´Â ¾ê±â´Â Á¿캯ÀÇ Å¸ÀÔÀÌ ´Ù¸£´Ù´Â ¶æÀÌ´Ù. arÀº Á¤¼öÇü ¹è¿ÀÇ ½ÃÀÛ ¹øÁö¸¦ °¡¸®Å°´Â Æ÷ÀÎÅÍ
»ó¼öÀ̸ç Á¤È®ÇÑ Å¸ÀÔÀº int * constÀÌ°í ´ë»óü´Â intÀÌ´Ù. ¹Ý¸é &arÀº ´ë»óü°¡ Å©±â 5ÀÇ Á¤¼öÇü ¹è¿À̸ç Á¤È®ÇÑ Å¸ÀÔÀº int (*)[5] constÀÌ´Ù.
¾çº¯ÀÇ Å¸ÀÔÀÌ ´Ù¸£´Ï pi¿¡
&arÀ» ´ëÀÔÇÒ ¼ö ¾ø´Ù. ²À ÇÏ·Á¸é (int
*)&ar·Î ij½ºÆÃÇؼ ´ëÀÔÇϰųª piÀÇ Å¸ÀÔÀ»
int (*pi)[5]·Î ¹Ù²Ù¾î ¹è¿ Æ÷ÀÎÅÍ·Î ¼±¾ðÇØ¾ß ÇÑ´Ù. ´ÙÀ½ ¿¹Á¦·Î &arÀÌ ¾î¶² Àǹ̸¦ °¡Áö´ÂÁö ¿¬±¸ÇØ º¸ÀÚ.
#include <stdio.h>
#include <malloc.h>
#include <string.h>
int main()
{
int
ar[5] = { 1,2,3,4,5 };
int
*p1 = ar;
int(*p2)[5]
= &ar;
printf("p1
= %p\n", p1);
printf("p2
= %p\n", p2);
p1++;
p2++;
printf("p1
= %p\n", p1);
printf("p2
= %p\n", p2);
}
p1 = 0078FC70
p2 = 0078FC70
p1 = 0078FC74
p2 = 0078FC84
Á¤¼öÇü ¹è¿ arÀÇ ¹øÁö¸¦ °¡Áö´Â
p1°ú Á¤¼öÇü ¹è¿ÀÇ Æ÷ÀÎÅÍ &arÀÇ ¹øÁö¸¦ °¡Áö´Â p2¸¦ ¼±¾ðÇÏ°í µÎ º¯¼öÀÇ Ãʱ⠹øÁö¿Í 1Áõ°¡½ÃŲ ÈÄÀÇ ¹øÁö¸¦ Ãâ·ÂÇß´Ù. p1, p2´Â ÃÖÃÊ °°Àº ¹øÁö¸¦ °¡¸®Å°°í ÀÖÁö¸¸ 1Áõ°¡ÇßÀ» ¶§ ¹øÁö°¡
´Þ¶óÁø´Ù. p1Àº Á¤¼öÇüÀ» °¡¸®Å°¹Ç·Î ´ë»óüÀÇ Å©±âÀÎ 4¸¸Å
Áõ°¡ÇÏÁö¸¸ p2´Â Å©±â 5ÀÇ Á¤¼öÇü ¹è¿À» °¡¸®Å°°í ÀÖÀ¸¹Ç·Î 20¹ÙÀÌÆ®(0 x14)¸¸Å Áõ°¡ÇÑ´Ù.
&arÀº arÀ»
ºÎºÐ ¹è¿·Î °¡Áö´Â °¡»óÀÇ Àüü ¹è¿¿¡ ´ëÇÑ ÀÌÂ÷ ¹è¿ Æ÷ÀÎÅÍ »ó¼öÀÌ´Ù. int *pi = &i ¼±¾ð¹®ÀÇ pi°¡ i¸¦ ù ¹ø° ¿ä¼Ò·Î °¡Áö´Â °¡»óÀÇ Á¤¼ö ¹è¿¿¡ ´ëÇÑ Æ÷ÀÎÅÍÀÎ
°Í°ú °°´Ù. arÀº Á¤¼ö¸¦ °¡¸®Å°Áö¸¸ &arÀº Á¤¼öÇü
¹è¿À» °¡¸®Å²´Ù´Â Á¡ÀÌ ´Ù¸£´Ù. ´ë»óü Å©±â°¡ ´Ù¸£¹Ç·Î Áõ°¨¿¡ ÀÇÇØ À̵¿ÇÏ´Â Å©±âµµ ´Ù¸£´Ù.
&arÀÇ Á¤Ã¼¸¦ ¾Ë¾ÒÀ¸¸é ´ÙÀ½ Äڵ带 Á¡°ËÇØ º¸ÀÚ. scanf´Â ÂüÁ¶ È£ÃâÀ» »ç¿ëÇϹǷΠÁ¤¼öÇüÀ̳ª ½Ç¼öÇü º¯¼ö¿¡ ´ëÇؼ´Â
& ¿¬»êÀÚ¸¦ ºÙ¿© ÁÖ¼Ò¸¦ °¡¸£ÃÄ ÁÖ¾î¾ß ÇÑ´Ù. ±×·¯³ª ¹®ÀÚ¿À» ÀԷ¹ÞÀ» ¶§´Â ¹®ÀÚ
¹è¿ ÀÚü°¡ Æ÷ÀÎÅÍÀ̹ǷΠ& ¿¬»êÀÚ¸¦ ºÙÀÌÁö ¾Ê´Â´Ù.
char name[20];
scanf("%s",name);
ÀÌ Äڵ尡 Á¤¼®ÀÌÁö¸¸ ±âº»Çüó·³ scanf("%s",&name);À¸·Î
½áµµ ¾Æ¹« ÀÌ»ó¾øÀÌ Àß ½ÇÇàµÈ´Ù. ¿Ö³ÄÇϸé name°ú &nameÀÇ ÁÖ¼Ò°¡ ¿ì¿¬È÷ °°±â ¶§¹®ÀÌ´Ù. °¡º¯ Àμö ÇÔ¼ö´Â
ÀμöÀÇ Å¸ÀÔº¸´Ù´Â ¼½ÄÀ» µû¸£±â ¶§¹®¿¡ &nameÀ̶ó°í ½áµµ %¼½Ä¿¡
´ëÀÀµÇ´Â ¹®ÀÚÇü ¹è¿·Î ÀνÄÇÏ¸ç ¹øÁö°¡ °°À¸´Ï µ¿ÀÛµµ Á¤»óÀûÀÌ´Ù. ÇÏÁö¸¸ ¹®¹ýÀûÀ¸·Î´Â ºÐ¸í Ʋ¸° °ÍÀ̸ç
Á¤ &¸¦ ºÙÀÌ·Á¸é &name[0]·Î ÇØ¾ß ¿Ç´Ù.
½ºÆ®¸²Àº ÆÄÀÏ »Ó ¾Æ´Ï¶ó Å°º¸µå³ª ¸ð´ÏÅÍó·³ ¹ÙÀÌÆ®¸¦ ¿¬¼ÓÀ¸·Î ÀÔÃâ·ÂÇÏ´Â ¹°¸®ÀûÀÎ ÀåÄ¡±îÁö Æ÷°ýÇÑ´Ù. ±×·¡¼ °í¼öÁØ ÀÔÃâ·Â ÇÔ¼ö·Î ÀåÄ¡±îÁö ´Ù·ê ¼ö ÀÖ´Ù. ÀåÄ¡ ½ºÆ®¸²Àº
Ç×»ó Á¸ÀçÇϹǷΠµû·Î ¿°Å³ª ´ÝÀ» ÇÊ¿ä¾øÀÌ ´ÙÀ½°ú °°ÀÌ Á¤ÀÇµÈ Ç¥ÁØ ½ºÆ®¸²À» »ç¿ëÇÑ´Ù.
À̸§ |
¼³¸í |
¹öÆÛ |
stdin |
Ç¥ÁØ ÀÔ·Â |
»ç¿ë |
stdout |
Ç¥ÁØ Ãâ·Â |
¹Ì»ç¿ë |
stderr |
Ç¥ÁØ ¿¡·¯ |
¹Ì»ç¿ë |
¹Ì¸® Á¤ÀǵǾî ÀÖ´Â ½ºÆ®¸²À̶óÇÏ¿© ±âÁ¤ÀÇ ½ºÆ®¸²(Predefined
Stream)À̶ó°í ºÎ¸¥´Ù. FILE *¸¦ ¹Þ´Â ¸ðµç ÇÔ¼ö¿¡ Ç¥ÁØ ½ºÆ®¸²À» »ç¿ëÇÒ ¼ö ÀÖ´Ù.
#include <stdio.h>
int main()
{
char
buf[256];
fputs("¹®ÀÚ¿À»
ÀÔ·ÂÇØ º¸½Ã¿À : ", stdout);
fgets(buf,
256, stdin);
fputs(buf,
stderr);
}
¹®ÀÚ¿À» ÀÔ·ÂÇØ º¸½Ã¿À : hello
hello
fgets, fputs ÇÔ¼ö´Â ½ºÆ®¸²À¸·Î ¹®ÀÚ¿À» ÀÔÃâ·ÂÇϴµ¥ fopenÀ¸·Î ¿¬ FILE Æ÷ÀÎÅÍ ´ë½Å ±âÁ¤ ½ºÆ®¸²ÀÎ stdin, stdoutÀ» ÁÖ¸é Å°º¸µå¿Í ȸéÀ¸·Î ÀÔÃâ·ÂÇÑ´Ù. fget´Â
Å°º¸µå°¡ ¸¶Ä¡ ÆÄÀÏÀÎ °Íó·³ »ç¿ëÀÚ°¡ ÀÔ·ÂÇÑ ÀÏ·ÃÀÇ ¹®ÀÚ¸¦ ÀÔ·Â¹Þ¾Æ buf¿¡ ÀúÀåÇÏ°í fputs´Â ¹öÆÛ¿¡ ÀúÀåµÈ ¹®ÀÚ¿À» ȸéÀ¸·Î Ãâ·ÂÇÑ´Ù. fgets´Â
ÀԷ¹ÞÀ» ÃÖ´ë ±æÀ̸¦ ÁöÁ¤ÇÒ ¼ö ÀÖ¾î scanfº¸´Ù ´õ ¾ÈÀüÇÏ´Ù.
¿¡·¯ ¸Þ½ÃÁö¸¦ Ãâ·ÂÇÏ´Â stderrÀÇ µðÆúÆ® ¼³Á¤Àº Ç¥ÁØ Ãâ·Â ½ºÆ®¸²ÀÎ stdout°ú °°¾Æ ȸéÀ¸·Î Ãâ·ÂµÈ´Ù. ÀÌ ½ºÆ®¸²À» ÇÁ¸°Åͳª ÆÄÀÏ·Î
ÀçÁöÇâ(Redirection)ÇÏ¸é ¿¡·¯ ¸Þ½ÃÁö¸¸ º°µµÀÇ ÀåÄ¡·Î º¸³¾ ¼ö ÀÖ¾î µð¹ö±ë¿¡ À¯¿ëÇÏ´Ù. ¿äÁòÀº ÅëÇÕ °³¹ß ȯ°æÀÌ ¿ö³« Àß µÇ¾î ÀÖ¾î ¿¡·¯ ½ºÆ®¸²À» Àß »ç¿ëÇÏÁö ¾ÊÁö¸¸ ½Ì±Û Å×½ºÅ· ȯ°æ¿¡¼´Â ½ÇÇà
°á°ú¿Í ¿¡·¯ ¸Þ½ÃÁö¸¦ ºÐ¸®ÇÏ¿© Ãâ·ÂÇÏ°ï Çß´Ù.
volatile ÁöÁ¤ÀÚ´Â º¯¼öÀÇ ÃÖÀûȸ¦ ±ÝÁöÇÑ´Ù. const¿¡ ºñÇØ »ó´ëÀûÀ¸·Î »ç¿ë ºóµµ°¡ ¶³¾îÁö´Âµ¥ ¾î¶² °æ¿ì¿¡ ÀÌ ÁöÁ¤ÀÚ°¡ ÇÊ¿äÇÑÁö ´ÙÀ½ Äڵ带 º¸ÀÚ.
double value;
for (int i = 0;i < 100;i++) {
value
= sqrt(k) + log(m);
//
do something
}
¹Ýº¹ÀûÀÎ ·çÇÁ¿¡¼ valueÀÇ °ªÀ» °è»êÇÏ¿© »ç¿ëÇÑ´Ù. value´Â ·çÇÁ Á¦¾î º¯¼ö¸¦ ÂüÁ¶ÇÏÁö ¾ÊÀ¸¸ç ¿ÜºÎ¿¡¼ ÁÖ¾îÁø k¿Í m¸¸ ÂüÁ¶ÇϹǷΠ·çÇÁ ½ÇÇàÁß¿¡´Â ´Ã °°Àº °ªÀÌ´Ù. ¹Ù²îÁöµµ ¾ÊÀ» °ªÀ»
¸Å ·çÇÁ¸¶´Ù ÀÏÀÏÀÌ °è»êÇÏ´Â °ÍÀº ºÐ¸í ³¶ºñÀ̹ǷΠ´ÙÀ½°ú °°ÀÌ ¼öÁ¤ÇÏ´Â °ÍÀÌ ÇÕ¸®ÀûÀÌ´Ù.
double value = sqrt(k) + log(m);
for (int i = 0;i < 100;i++) {
//
do something
}
·çÇÁ·Î µé¾î°¡±â Àü¿¡ value°ªÀ» ¹Ì¸® °è»êÇØ ³õ°í ·çÇÁ ³»ºÎ¿¡¼´Â
°áÁ¤µÈ value°ªÀ» »ç¿ëÇϱ⸸ ÇÑ´Ù. ÀÌ·¸°Ô Çصµ ½ÇÇà°á°ú´Â
°°´Ù. ¶È¶ÈÇÑ ÄÄÆÄÀÏ·¯´Â ·çÇÁ ³»ºÎ¿¡¼ »ó¼öÀÎ °ªÀ» ¹Ì¸® µü Çѹø¸¸ °è»êÇÏ´Â ÄÚµå·Î ¹Ù²Ù¾î ÃÖÀûȸ¦
¼öÇàÇÑ´Ù. °³¹ßÀÚ°¡ À§ Äڵ带 ÀÛ¼ºÇصµ ÄÄÆÄÀÏ·¯°¡ ¾Ë¾Æ¼ ¾Æ·¡ ÄÚµå·Î ¹Ù²ãÁØ´Ù. µÎ ÄÚµå´Â »ç½Ç»ó ½ÇÇà ¼Óµµ¸¸ ´Ù¸¦ »Ó µ¿ÀÛÀº °°´Ù.
±×·¯³ª °ú¿¬ µÎ Äڵ尡 Á¤¸» ¾Æ¹« Â÷ÀÌ°¡ ¾øÀ»±î? ´ë°³ÀÇ °æ¿ì´Â ¶È°°Àº
ÄÚµåÀÌÁö¸¸ ¾ÆÁÖ ¹Î°¨ÇÑ »óȲ¿¡¼´Â ´Ù¸¥ °á°ú°¡ ³ªÅ¸³¯ ¼öµµ ÀÖ´Ù. ´ëÇ¥ÀûÀÎ ¿¹´Â ¿©·¯ °³ÀÇ ½º·¹µå°¡
º´·ÄÀûÀ¸·Î ½ÇÇàµÇ´Â ¸ÖƼ ½º·¹µåÀÌ´Ù. ÀÌ Äڵ常 º¸¸é ºÐ¸í ÃÖÀûÈÇصµ »ó°ü¾øÁö¸¸ ¿ÜºÎ ½º·¹µå¿¡¼ k³ª mÀÇ °ªÀ» º¯°æÇÑ´Ù¸é ¸Å¹ø °è»êÇÏ´Â °Í°ú ¹Ì¸® °è»êÇØ ³õ´Â °ÍÀº
°á°ú°¡ ´Þ¶óÁø´Ù.
ÀÌ·² ¶§ ÄÄÆÄÀÏ·¯ÀÇ ÃÖÀûȸ¦ ±ÝÁöÇÏ´Â ÁöÁ¤ÀÚ°¡ ¹Ù·Î volatileÀÌ´Ù. ÀÌ ÁöÁ¤ÀÚ°¡ ºÙ¾î ÀÖ´Â º¯¼ö¿¡ ´ëÇؼ´Â ÄÄÆÄÀÏ·¯°¡ ¾î¶°ÇÑ ÃÖÀûȵµ ÇÏÁö ¾ÊÀ¸¸ç °³¹ßÀÚ°¡ ÀÛ¼ºÇÑ Äڵ带 ¾×¸é
±×´ë·Î ÄÄÆÄÀÏÇÑ´Ù. value º¯¼ö ¼±¾ð¹®¿¡ volatileÀ»
ºÙ¿© µÎ¸é ¼³»ç ÀÌ º¯¼ö °è»ê¹®ÀÌ ºñÈ¿À²ÀûÀ̰ųª ºÒÇÊ¿äÇØ º¸ÀÌ´õ¶óµµ Àý´ë °Çµå¸®Áö ¾Ê´Â´Ù.
volatile double value;
volatile ÁöÁ¤ÀÚÀÇ Àǹ̸¦ ÇѸ¶µð·Î Ç¥ÇöÇϸé "±îºÒÁö ¸»°í ½ÃÅ°´Â´ë·Î ÇØ" ÀÌ·± ¶æÀÌ´Ù. ÀÌ ÁöÁ¤ÀÚ°¡ ¹Ýµå½Ã ÇÊ¿äÇÑ »óȲÀº °øÀ¯ Á¤º¸°¡ ¸¹Àº º¹ÀâÇÑ ¸ÖƼ ½º·¹µå ÇÁ·Î±×·¥À̰ųª Çϵå¿þ¾î ÀÎÅÍ·´Å͸¦ ´Ù·ç´Â
µð¹ÙÀ̽º µå¶óÀ̹ö Á¤µµ¿©¼ À¢¸¸ÇÑ ±Ô¸ð¿¡¼´Â Àß »ç¿ëµÇÁö ¾Ê´Â´Ù.