º¹ÀâÇÑ ¼ö½Ä

Áõ°¨ ¿¬»êÀº »ç¿ë ºóµµ°¡ ³ô¾Æ 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 *ŸÀÔÀ» °¡¸®Å°´Â À¯µµ ŸÀÔÀÌ´Ù. 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 = &pi;         // ºÒ°¡´É

     **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]¿Í ÀÚ°ÝÀÌ °°´Ù. ±×·¯³ª ¿ÏÀüÈ÷ °°Áö´Â ¾Ê´Âµ¥ Á¤Àû ¹è¿­Àº ºÎºÐ ¹è¿­ÀÌ ¸ðµÎ ÀÏÁ¤ÇÑ Á÷»ç°¢Çü ¹è¿­ÀÌÁö¸¸ ÀÌÁß Æ÷ÀÎÅ͸¦ »ç¿ëÇÑ ¹è¿­Àº ºÎºÐ ¹è¿­ÀÇ Å©±â¸¦ °¢°¢ ´Ù¸£°Ô ÁöÁ¤ÇÒ ¼ö ÀÖ´Â ·¡±âµå ¹è¿­ÀÌ´Ù.

¿ø·¡ÀÇ ³íÀÇ·Î µ¹¾Æ°¡ ÀÌÂ÷¿ø ¹è¿­À» µ¿ÀûÀ¸·Î ÇÒ´çÇÒ ¼ö Àִ°¡¿¡ ´ëÇÑ ÁøÀ§ ¿©ºÎ¸¦ °¡·Á º¸ÀÚ. ¹®¹ýÀûÀÎ ¸é¿¡¼­¸¸ º¸¸é µÎ ÷ÀÚÀÇ Å©±â¸¦ ½ÇÇàÁß¿¡ °áÁ¤ÇÒ ¼ö ¾ø¾î ÀÌÂ÷¿ø ¹è¿­À» Çѹø¿¡ ÇÒ´çÇÏ´Â °ÍÀº ºÒ°¡´ÉÇÏ´Ù. ÇÏÁö¸¸ ½Ç¹«ÀûÀÎ ¸é¿¡¼­ º¸¸é ÀÌÂ÷ ¹è¿­Ã³·³ µ¿ÀÛÇÏ´Â ÀÌÁß Æ÷ÀÎÅÍ·Î µ¿ÀÏÇÑ ÇüÅÂÀÇ ¹è¿­À» ¸¸µé ¼ö´Â ÀÖ¾î °¡´ÉÇÏ´Ù°í º¼ ¼öµµ ÀÖ´Ù.

&ar

¹è¿­¸íÀº ¹è¿­ÀÇ ½ÃÀÛ ¹øÁö¸¦ °¡¸®Å°´Â Æ÷ÀÎÅÍ »ó¼öÀÌ¸ç ¹è¿­ÀÇ ½ÃÀÛ À§Ä¡¸¦ ¾Ë°í ½Í´Ù¸é º°µµÀÇ ¿¬»êÀÚ¾øÀÌ ¹è¿­ À̸§À» »ç¿ëÇÑ´Ù. ¿¹¸¦ µé¾î 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

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 ÁöÁ¤ÀÚÀÇ Àǹ̸¦ ÇѸ¶µð·Î Ç¥ÇöÇϸé "±îºÒÁö ¸»°í ½ÃÅ°´Â´ë·Î ÇØ" ÀÌ·± ¶æÀÌ´Ù. ÀÌ ÁöÁ¤ÀÚ°¡ ¹Ýµå½Ã ÇÊ¿äÇÑ »óȲÀº °øÀ¯ Á¤º¸°¡ ¸¹Àº º¹ÀâÇÑ ¸ÖƼ ½º·¹µå ÇÁ·Î±×·¥À̰ųª Çϵå¿þ¾î ÀÎÅÍ·´Å͸¦ ´Ù·ç´Â µð¹ÙÀ̽º µå¶óÀ̹ö Á¤µµ¿©¼­ À¢¸¸ÇÑ ±Ô¸ð¿¡¼­´Â Àß »ç¿ëµÇÁö ¾Ê´Â´Ù.