#31 ÀÓÀ롂 (turbo28 ) [°­ÁÂ] CÆ÷ÀÎÅÍ3-1: ´ÙÂ÷¿ø ¹è¿­ Æ÷ÀÎÅÍ 03/06 00:54 197 line ÀÛ¼º ¿¬¿ùÀÏ: 1989.9.30, 10.2 ¸¶ÀÌÅ©·Î¼ÒÇÁÆ®¿þ¾î °ÔÀç: 1989.11 HWP/TXT º¯È¯: 1993.3.5 >>> Á¤º¹ Åͺ¸ C <<< Á¦3ȸ ½Ç¸Å°³º¯¼ö¸¦ º¯°æÇÏ´Â ÇÔ¼ö¿Í ´ÙÂ÷¿ø ¹è¿­ Æ÷ÀÎÅÍÀÇ Á¤º¹ ±Û/ÀÓÀ롂 (¼­¿ï´ë ±â°è°øÇаú3) --------------------------------------------------------------------- 1 º»·Ð¿¡ ¾Õ¼­ --------------------------------------------------------------------- Â¸é ÅÍÁúµíÇÑ Çª¸¥ ÇÏ´ÃÀÇ Áö³­ 10¿ùÀ» °ú¿¬ Ç㹫ÇÔ¾øÀÌ ÀǹÌÀÖ°Ô º2¸³Â´ÂÁö ¸ð¸£°Ú´Ù. ¹¹ °ÅâÇÏ°Ô Àλý Àüü¸¦ ´ë±¹ÀûÀ¸·Î °É°í ³Ñ¾îÁöÁö ¾Ê´õ¶óµµ ÀÚ±â ÀÚ½ÅÀÇ »ýÈ°À» ±×³¯±×³¯ ¶æÀÖ°Ô º¸³»´Â ¹æ¹ý¿¡´Â ¿©·¯ °¡Áö °¡ ÀÖÀ» ¼ö ÀÖ´Ù. ¿¹ÄÁµ¥ Áö±Ý ÇÑâ ¶§°¡ ¹«¸£ÀÍÀº ÀþÀºÀ̶ó¸é ¾Æ¸¶ 10¿ù À» ¿¬ÀÎ(µé)°ú ÇÔ²² DzDzÇÑ ¸¶À½À» ³ª´©¸ç ²Þ²ÙµíÀÌ º¸³»°í ½Í¾úÀ» °ÍÀÌ ´Ù. ÇÏÁö¸¸ ÇÊÀÚ¸¦ À§½ÃÇÏ¿© Áö±Ý ÀÌ Ã¥À» Àаí ÀÖ´Â µ¶ÀÚµéÀº ´ë°³ ±×·± ³ª³¯ÀÌ ¿©ÀÇÄ¡ ¾Ê¾ÒÀ» °ÍÀ¸·Î º»´Ù. ¹°·Ð ¸¶À½ÀÌ¾ß ´« ¾ÕÀ» ³¯½Ø°Ô ½ºÃÄ°¡ ´Â ÇÑ ¸¶¸® Á¦ºñ°¡ µÇ°íÇ ½ÉÁ¤ÀÌ ±¼¶Ò °°°ÚÁö¸¸, Áö±Ý²¯ Á¤µç ÄÄÇ»2Å͸¦ ´« ¾Õ¿¡ µÎ°í¼­ ´Ù¸¥ µ¥´Ù°¡ ½½¸ç½Ã ÇÑ´«À» ÆÇ´Ù´Â °ÍÀÌ ±×¸® ½¬¿î Àϸ¸Àº ¾Æ´Ò °ÍÀÌ´Ù. ¾Æ¹¸Æ° ÀÚÀǵç ŸÀÇµç °£¿¡ Á¦ºñó·³ ³¯¶ó ´Ù´Ï±â°¡ °ï¶õÇÏ´Ù¸é, ¿ì¸® ´Â ¹Ì·Ã¾øÀÌ º»¿¬ÀÇ ÀÚ¸®·Î µ¹¾Æ°¡¼­ ¿ì¸®ÀÇ ÃæÁ÷ÇÑ ÄÄÇ»ÅÍÀÇ µµ¿ò¿¡ ÈûÀÔ ¾î ¾ÕÀ¸·Î ÇÑ ´Þ °¡·® ³²Àº 11¿ùÀÌ ³²µé ¸øÁö ¾Ê°Ô ÀǹÌÀÖµµ·Ï ³ë·ÂÇØ¾ß°Ú ´Ù. ±×·¯±â À§ÇØ CÀÇ Æ÷ÀÎÅÍ Á¤º¹À» ¸ñÇ¥·Î 11¿ù ÇÑ ´Þ °í±ººÐÅõÇÏ´Â °Íµµ ºÐ¸í ½Ç¼Ó ²Ï³ª Â÷¸®´Â ÀÏÀÌÁö ½Í´Ù. --------------------------------------------------------------------- 2 Æ÷À2ÎÅÍ ÂüÁ¶¿¡ ÀÇÇÑ ½Ç¸Å°³º¯¼öÀÇ º¯°æ --------------------------------------------------------------------- Áö³­ ´Þ ¿¬Àç¿¡¼­ Æ÷ÀÎÅÍ º¯¼öÀÇ Á¤ÀÇ ¹æ¹ý°ú ÇÔ¼öÀÇ ½Ç¸Å°³º¯¼ö(actu al parameter == argument)¸¦ º¯°æÇÏ´Â ÇÔ¼ö¸¦ ÀÛ¼ºÇÏ´Â ¹æ¹ýÀ» ¼³¸íÇÏÁö ¾ÊÀº °ü°è·Î ±× ±ÛÀ» ÀÌÇØÇϴµ¥ ¾î·Á¿òÀÌ ÀÖ¾úÁö ¾Ê³ª ½Í¾î¼­ À̹ø ±âȸ ¿¡ ÀÚ¼¼È÷ ¾ð±ÞÇÏ°íÀÚ ÇÑ´Ù. 2.1 ½Ç¸Å°³º¯¼ö¸¦ º¯°æÇÏ·Á¸é ÇÔ¼ö¸¦ ¾²´Ù º¸¸é ÇÔ¼ö¸¦ °¡Áö°í ½Ç¸Å°³º¯¼ö¸¦ Á÷Á¢ º¯°æÇÏ°íÀÚ ÇÒ °æ ¿ì°¡ Á¾Á¾ »ý±ä´Ù. °¡Àå ÀüÇüÀûÀÎ ¿¹°¡ µÎ º2¯¼öÀÇ °ªÀ» ¼­·Î ±³È¯ÇÏ´Â °Í ÀÌ´Ù. µÎ º¯¼ö x, yÀÇ °ªÀ» ¼­·Î ±³È¯ÇÏ·Á¸é ´ë°³ ´ÙÀ½°ú °°ÀÌ ÇÑ´Ù. À̶§ temp¶ó´Â Àӽú¯¼ö¸¦ ½á¾ß ÇÑ´Ù. temp = x; <--- x¿¡ ÀÖ´Â °ªÀ» temp¿¡ ³Ö°í x = y; <--- yÀÇ °ªÀ» x·Î º¸³»°í y = temp; <--- ÀÌÁ¦ temp¿¡ º¸°ü ÁßÀÎ ¿ø·¡ÀÇ x°ªÀ» y¿¡ ³Ö´Â´Ù. ÀÌÁ¦ µÎ º¯¼öÀÇ °ªÀ» ±³È¯ÇÏ´Â ÇÔ¼ö¸¦ ÇÑ ¹ø ¸¸µé¾îº¸ÀÚ. ÀÏ´Ü ¾Æ·¡¿Í °°ÀÌ ¸¸µé¾ú´Ù. °ú¿¬ ÀÌ ÇÔ¼ö¸¦ ½á¼­ doubleÇüÀÇ µÎ º¯¼ö a, bÀÇ °ªÀ» ±³ ȯÇÒ ¼ö ÀÖÀ»±î? ÇÔ¼ö Á¤ÀÇ: void swapdouble(dou2ble x, double y) { | | double temp; +---------+----- Çü½Ä¸Å°³º¯¼ö (½Ç¸Å°³º¯¼öÀÇ º¹»çÆÇ) temp = x; x = y; y = temp; } ÇÔ¼ö È£Ãâ: swapdouble(a, b); +---+----- ½Ç¸Å°³º¯¼ö ¿¹»óÀº Çß°ÚÁö¸¸ a, bÀÇ °ªÀº ÀüÇô ±³È¯µÇÁö ¾Ê´Â´Ù. ¿Ö³ÄÇϸé x, y´Â ½Ç¸Å°³º¯¼öÀÇ º¹»çÆÇÀÎ Çü½Ä¸Å°³º¯¼ö(formal parameter)ÀÏ »ÓÀ̱⠶§¹®ÀÌ ´Ù. C´Â ÆĽºÄ®°ú ¸¶Âù°¡Áö·Î°2ª¿¡ ÀÇÇÑ È£Ãâ(call by value) ¹æ½Ä¿¡ ÀÇÇØ ¸Å°³º¯¼ö¸¦ ÇÔ¼ö¿¡ °Ç³× Áֱ⠶§¹®¿¡ ÇÔ¼ö ³»¿¡¼­ Çü½Ä¸Å°³º¯¼ö¸¦ Á¦¾Æ¹« ¸® º¯°æÇÏ´õ¶óµµ ¿ø·¡ÀÇ ½Ç¸Å°³º¯¼öÀÇ °ªÀº ÀüÇô ¹Ù²îÁö ¾Ê´Â´Ù. ÀÌ·² ¶§ ÆĽºÄ®À̾ú´Ù¸é ¾Æ·¡¿Í °°ÀÌ ¿¹¾à¾î var¸¦ ½á¼­ Çü½Ä¸Å°³º¯¼ö ¸¦ ¼±¾ðÇßÀ» °ÍÀÌ´Ù. ±×·¸´Ù¸é C¿¡¼­´Â ¾î¶»°Ô ¼±¾ðÇØ¾ß ÇÒ±î? ³ªÁß¿¡ ¼³ ¸íÇÏ°Ú´Ù. ÆĽºÄ®: procedure SwapReal(var x, y:Real) var Temp: Real; begin Temp := x; x := y; y := Temp end; 2.2 ¹øÁö ¿¬2»êÀÚ &ÀÇ ÀÇ¹Ì C¿¡¼­ ¾Æ·¡ÀÇ ¼ö½ÄÀº µµ´ëü ¹» ÇÏÀÚ´Â °ÍÀϱî? &x ¿©±â¼­ &´Â ºñÆ® AND ¿¬»êÀÚ°¡ ¾Æ´Ï°í ´ÜÇ×(unary) ¿¬»êÀÚÀÇ ÀÏÁ¾ÀÎ ¹øÁö ¿¬»êÀÚ(address operator)ÀÌ´Ù. ±×·¡¼­ °£´ÜÇÏ°Ô ´ÜÇ× & ¿¬»êÀÚ¶ó°í µµ ÇÑ´Ù. ´ÜÇ× & ¿¬»êÀÚÀÇ ÇÇ¿¬»êÀÚ°¡ µÉ ¼ö ÀÖ´Â °ÍÀº Áº¯°ªÀÌ´Ù. Áº¯°ª(lva lue)À̶õ ¹«¾ùÀÌ°Ç °ªÀ» ´ëÀÔÇÒ ¼ö ÀÖ´Â °Í, Áï ¸Þ¸ð¸®»ó¿¡ ÀúÀåµÇ¾î ÀÖÀ¸ ¸ç ´ëÀÔ µîÀÇ Á¶ÀÛÀÌ °¡´ÉÇÑ °ÍÀ» ¸»ÇÑ´Ù. ½±°Ô ¸»Çؼ­ Áº¯°ªÀº ´ëÀÔ ¿¬ »êÀÚ =ÀÇ Áº¯¿¡ ¿Ã ¼ö ÀÖ´Â °ªÀÌ¶ó ¿©±â¸é Ʋ¸²¾ø´Ù. 2 Æ÷ÀÎÅÍ º¯¼ö¸¦ Æ÷ÇÔÇÏ¿© ¸ðµç º¯¼ö´Â Áº¯°ªÀÌ´Ù. Áº¯°ªÀÌ µÉ ¼ö ¾ø ´Â °ÍÀº ¼ö½ÄÀ̳ª »ó¼ö(¹®ÀÚ¿­ »ó¼ö, ¹è¿­ »ó¼ö Æ÷ÇÔ) µîµîÀÌ´Ù. ¼ö½ÄÀ̳ª »ó¼ö¿¡´Ù °ªÀ» ´ëÀÔÇÒ ¼ö´Â ¾ø´Â ³ë¸© ¾Æ´Ñ°¡? ´Ù½Ã º»·ÐÀ¸·Î µÇµ¹¾Æ°¡¼­, &x°¡ ¶æÇÏ´Â ¹Ù´Â ¾î¶² º¯¼ö x°¡ ÀúÀåµÇ¾î ÀÖ´Â °÷ÀÇ ¼±µÎ¹øÁö°ªÀÌ´Ù. Áö³­ 10¿ùÈ£ÀÇ [±×¸² 1]À» ±â¾ïÇÏ°í ÀÖÀ¸¸®¶ó ¹Ï´Â´Ù. Æ÷ÀÎÅÍ´Â °ð ¹øÁö¶ó´Â »ç½Ç ¸»ÀÌ´Ù. ±×·¯¹Ç·Î ¹øÁö ¿¬»êÀÚÀÇ °á°ú °ªÀº ¹øÁö°ª, °ð Æ÷ÀÎÅÍÀ̸ç ÀÌ ¸»Àº &x¸¦ ÀûÀýÇÑ Æ÷ÀÎÅÍ º¯¼ö¿¡´Ù ´ëÀÔÇØ ÁÙ ¼ö ÀÖ´Ù´Â ¶æÀÌ´Ù. ±×·2¯¸é ¹øÁö°ªÀ» ´ëÀÔÇϴµ¥ ÇÊ¿äÇÑ Æ÷ÀÎÅÍ º¯¼ö¸¦ Á¤ÀÇÇÏ´Â ¹æ¹ý¿¡ ´ëÇÏ¿© ¾Ë¾Æº¸ÀÚ. 2.3 Æ÷ÀÎÅÍ º¯¼öÀÇ Á¤ÀÇ¿Í ¹øÁö°ªÀÇ ´ëÀÔ Æ÷ÀÎÅÍ º¯¼ö Áß¿¡¼­ Ưº°È÷ ¹®ÀÚ¿­ Æ÷ÀÎÅÍ º¯¼ö¸¦ Á¤ÀÇÇÏ´Â ¹æ¹ýÀº ÀÌ ¹Ì Áö³­ 10¿ùÈ£¿¡¼­ ¼³¸íÇÑ ¹Ù ÀÖ´Ù. ´Ù¸¥ Æ÷ÀÎÅÍ º¯¼ö¸¦ Á¤ÀÇÇÏ´Â ¹æ¹ýµµ ÀÌ¿Í À¯»çÇÏ´Ù. ±¸µÎÁ¡ *¸¦ Æ÷ÀÎÅÍ º¯¼ö¸í ¹Ù·Î ¾Õ¿¡´Ù µ¡ºÙÀ̱⸸ ÇÏ¸é µÇ´Âµ¥ ´ÙÀ½°ú °°Àº ¼ø¼­¸¦ ¹â¾Æ Æ÷ÀÎÅÍ º¯¼ö¸¦ Á¤ÀÇÇϸé Ʋ¸²¾ø´Ù. --------------------------------------------------------------------- [1] ¹øÁö°ªÀ» ÃëÇ2Ï°íÀÚ ÇÏ´Â º¯¼öÀÇ ¼±¾ð¹®À» ¸Ó¸´¼Ó¿¡ ¶°¿Ã¸°´Ù. ÀϹÝÀû À¸·Î º¯¼öÀÇ µ¥ÀÌÅÍÇüÀÌ TÇüÀÏ ¶§ ¾Æ·¡¿Í °°ÀÌ Á¤ÀÇÇßÀ» °ÍÀÌ´Ù. T variable; [2] ¸Ó¸´¼Ó¿¡ ¶°¿Ã¸° ¼±¾ð¹®¿¡¼­ º¯¼ö¸í variableÀ» Æ÷ÀÎÅÍ º¯¼ö¸í ptr·Î ´ëÄ¡ÇÏ°í T¿Í ptr »çÀÌ¿¡ ±¸µÔÁ¡ *¸¦ »ðÀÔÇÑ´Ù. À̶§ *´Â °ü½ÀÀûÀ¸·Î ptrÂÊ¿¡ ºÙÀδÙ. À̶§ ÇÊ¿äÇϸé ptr¿¡ °ýÈ£¸¦ ½á¾ß ÇÑ´Ù. T *ptr; ¶Ç´Â T *(ptr); --------------------------------------------------------------------- ÀÌ»ó°ú °°ÀÌ [1]~[2]´Ü°è¸¦ °ÅÄ¡¸é TÇü Æ÷2ÀÎÅÍ º¯¼ö ptrÀÇ Á¤ÀÇ°¡ ¿Ï °áµÈ´Ù. °¢Á¾ »ê¼úÇü Æ÷ÀÎÅÍ º¯¼öÀÇ ¿¹¸¦ µé¾î º¸¸é ¾Æ·¡¿Í °°´Ù. int *pi; <--- intÇü Æ÷ÀÎÅÍ º¯¼ö pi¸¦ Á¤ÀÇ double *px; <--- doubleÇü Æ÷ÀÎÅÍ º¯¼ö px¸¦ Á¤ÀÇ char *ps; <--- charÇü Æ÷ÀÎÅÍ º¯¼ö ps¸¦ Á¤ÀÇ ¹®ÀÚ¿­ Æ÷ÀÎÅÍ º¯¼ö¸¦ Á¤ÀÇÇÏ´Â ¹æ¹ý°ú µ¿ÀÏÇÔ unsigned char *pc; <- unsigned charÇü Æ÷ÀÎÅÍ º¯¼ö pc¸¦ Á¤ÀÇ ÀÌ ¶§ ÀϹÝÀûÀ¸·Î TÇü Æ÷ÀÎÅÍ º¯¼ö¶ó´Â ¸»Àº ±× Æ÷ÀÎÅÍ º¯¼ö¿¡ ´ëÀÔÇÒ ¼ö ÀÖ´Â °ªÀÌ TÇü ´ë»óü(o2bject, ¿¹ÄÁ´ë TÇü º¯¼ö)ÀÇ ¼±µÎ¹øÁö°ªÀ» ÀÇ¹Ì ÇÑ´Ù´Â »ç½ÇÀÓÀ» À¯³äÇϱ⠹ٶõ´Ù. ´Ù¸¸ Æ÷ÀÎÅÍÀÇ Á¾·ù¸¦ ÃÑĪÇϴµ¥ ¾²ÀÌ ´Â ¿ë¾îÀÎ ¹®ÀÚ¿­ Æ÷ÀÎÅÍ(¹®ÀÚ Æ÷ÀÎÅÍ), Á¤¼ö Æ÷ÀÎÅÍ, ¹è¿­ Æ÷ÀÎÅÍ, Æ÷ÀÎ ÅÍÀÇ Æ÷ÀÎÅÍ µîµî¿¡¼­´Â ÆíÀÇ»ó Á¢¹Ì»ç '-Çü'À» »ý·«Çϱâ·Î ÇÑ´Ù. ÀÌÁ¦ &xÀÇ °ªÀ» Æ÷ÀÎÅÍ º¯¼ö¿¡ ´ëÀÔÇغ¸ÀÚ. ±×·±µ¥ C¿¡¼­´Â ¹øÁö°ªÀ» ¾Æ¹« Æ÷ÀÎÅÍ º¯¼ö¿¡³ª ¹«ÀÛÁ¤ ´ëÀÔÇÏ´Â °ÍÀº ÃÖ´ëÇÑÀ¸·Î ÇÇÇÏ´Â °ÍÀÌ ÁÁ´Ù (Åͺ¸ C ÄÄÆÄÀÏ·¯°¡ ±×·¸°Ô Çϵµ·Ï °¡¸¸ ³öµÎÁöµµ ¾Ê´Â´Ù). Áï intÇü º¯¼ö ÀÇ ¹øÁö°ªÀº ¹Ýµå½Ã intÇü Æ÷ÀÎ2ÅÍ º¯¼ö¿¡ ´ëÀÔÇØ¾ß Çϸç, ¸¶Âù°¡Áö·Î doub leÇü º¯¼öÀÇ ¹øÁö°ªÀº ¹Ýµå½Ã doubleÇü Æ÷ÀÎÅÍ º¯¼ö¿¡¸¸ ´ëÀÔÇØ¾ß ÇÑ´Ù. [±×¸² 1] ´ëÀÔ½Ä px = &xÀÇ ÀǹÌ(½ÇÁ¦ »óȲ) --------------------------------------------------------------------- ´ëÀÔ °úÁ¤ px x(8¹ÙÀÌÆ® Å©±â) +--------+ -+-+-+-+-+-+-+-+-+- | |<--------+ -+++-+-+-+-+-+-+-+- +--------+ +-------+ xÀÇ ¼±µÎ¹øÁö°ªÀÌ px¿¡ ´ëÀԵȴ2Ù. ´ëÀÔ °á°ú px x +--------+ -+-+-+-+-+-+-+-+-+- | ¹øÁö°ª | -+-+-+-+-+-+-+-+-+- +--------+ --------------------------------------------------------------------- [±×¸² 1]°ú °°ÀÌ ´ëÀÔ½Ä px = &x¸¦ ¼öÇàÇÑ ÈÄ, doubleÇü Æ÷ÀÎÅÍ º¯¼ö px¿¡´Â doubleÇü º¯¼ö xÀÇ ¼±µÎ¹øÁö°ªÀÌ ÀúÀåµÈ´Ù. ÀÌ ¸»À» Æ÷ÀÎÅÍ °³³äÀ» ½á¼­ Ç¥ÇöÇÑ´Ù¸é, +--------------------------------------------------------2+ | "doubleÇü Æ÷ÀÎÅÍ º¯¼ö px´Â doubleÇü º¯¼ö x¸¦ °¡¸®Å²´Ù" | | ¶Ç´Â °£´ÜÈ÷ "Æ÷ÀÎÅÍ px´Â º¯¼ö x¸¦ °¡¸®Å²´Ù" | +--------------------------------------------------------+ ¶ó°í ÇÒ ¼ö ÀÖ´Ù. ÀÌ ¸»À» ±×¸²À¸·Î ³ªÅ¸³»¸é [±×¸² 2]¿Í °°´Ù. [±×¸² 2] "px´Â x¸¦ °¡¸®Å²´Ù."ÀÇ °³³äµµ --------------------------------------------------------------------- px x +-------+ -+-+-+-+-+-+-+-+-+- | o --+---------2------>-+-+-+-+-+-+-+-+-+- +-------+ --------------------------------------------------------------------- ´ÙÀ½ ±Û·Î °è¼Ó À̾îÁý´Ï´Ù. turbo28 Åͺ¸ÀÌ»¡ ÀÓ ÀÎ °Ç #32 ÀÓÀ롂 (turbo28 ) [°­ÁÂ] CÆ÷ÀÎÅÍ3-2: ´ÙÂ÷¿ø ¹è¿­ Æ÷ÀÎÅÍ 03/06 00:56 263 line 2.4 °£Á¢ÁöÁ¤ ¿¬»êÀÚ *ÀÇ ÀÇ¹Ì ÀÌÁ¦ ¾Æ·¡ÀÇ ¼ö½ÄÀÌ ¶æÇÏ´Â ¹Ù¸¦ ¾Ë¾Æº¸ÀÚ. *px ¿©±â¼­ *´Â °ö¼À ¿¬»êÀÚ *°¡ ¾Æ´Ï´Ù. ¶ÇÇÑ Æ÷ÀÎÅÍ º¯¼ö¸¦ Á¤ÀÇÇÒ ¶§ ¾²´Â ±¸µÔÁ¡ *µµ ¾Æ´Ï´Ù. ¿©±â¼­ÀÇ *´Â °£Á¢ÁöÁ¤ ¿¬»êÀÚ(indirection oper ator)¶ó°í ºÒ¸®¿ì´Â ´ÜÇ× ¿¬»êÀÚÀÇ ÀÏÁ¾ÀÌ´Ù. ´ÜÇ× * ¿¬»êÀÚÀÇ ÇÇ¿¬»êÀÚ´Â ¾ðÁ¦³ª Æ÷ÀÎÅÍ(¹øÁö°ª)À̾î¾ß ÇÑ´Ù. Áï Æ÷ÀÎÅÍ º¯¼ö³ª °¢Á¾ Æ÷ÀÎÅÍ ¼ö½ÄÀ̾î¾ß ÇÑ´Ù. ´ÜÇ× * ¿¬»êÀÚ(´ÜÇ× º°Ç¥ ¿¬ »êÀÚ·Î ÀÐÀ» °Í)°¡ ÇÏ´Â ÀÏÀº ±× Æ÷ÀÎÅÍ°¡ °¡¸®Å°°í ÀÖ´Â ¹øÁö¿¡ ÀúÀåµÇ¾î ÀÖ´Â2 ³»¿ëÀ» Àо´Â °ÍÀÌ´Ù. À̶§ Àо°í ¶ÇÇÑ ÀúÀåÇÏ´Â ÀÏÀ» "ÂüÁ¶(r eference)"¶ó´Â ¿ë¾î·Î Ç¥ÇöÇÑ´Ù. ±× Àо ³»¿ëÀº ´ÜÇ× * ¿¬»ê½ÄÀÇ °á°ú ·Î ÃëÇØÁø´Ù. ´ÜÇ× * ¿¬»êÀÚ´Â ÇÇ¿¬»êÀÚÀÎ Æ÷ÀÎÅÍ(º¯¼ö ¶Ç´Â ¼ö½Ä)°¡ ¹«½¼Çü Æ÷ÀÎÅÍ À̳Ŀ¡ µû¶ó °¢°¢ ´Ù¸£°Ô ÇൿÇÑ´Ù. Áï Æ÷ÀÎÅÍ°¡ °¡¸®Å°°í ÀÖ´Â ¼±µÎ¹øÁö ¿¡¼­ºÎÅÍ ±× "¹«½¼Çü"ÀÇ ¹ÙÀÌÆ® Å©±â¸¸Å­¸¸ Àо´Â °ÍÀÌ´Ù. ¿¹¸¦ µé¾î ÇÇ¿¬»êÀÚ°¡ doubleÇü Æ÷ÀÎÅͶó¸é ¼±µÎ¹øÁöºÎÅÍ 8 ¹ÙÀÌÆ®¸¸Å­ Àо´Ù. ±× ·¸´Ù¸é ¿Ö 1¹ÙÀÌÆ®°¡ ¾Æ´Ï¶ó 8¹ÙÀÌÆ®¾¿À̳ª Àо¾ß Çϴ°¡? 2px°¡ °¡¸®Å°´Â ´ë»óü(object)´Â doubleÇü º¯¼ö xÀ̸ç px´Â ÇöÀç º¯¼ö xÀÇ ¼±µÎ¹øÁö°ªÀ» °¡Áö°í ÀÖ´Ù. À̶§ px°¡ °¡¸®Å°°í ÀÖ´Â ¹øÁö¿¡¼­ Ãâ¹ßÇÏ ¿© 8¹ÙÀÌÆ®±îÁöÀÇ ¸Þ¸ð¸®¿¡´Â ¹«¾ùÀÌ ÀúÀåµÇ¾î Àִ°¡? ¹Ù·Î º¯¼ö xÀÇ °ª ÀÌ ÀúÀåµÇ¾î ÀÖÁö ¾ÊÀº°¡! µû¶ó¼­ *px¶ó´Â Æ÷ÀÎÅÍ ¼ö½ÄÀº °á°úÀûÀ¸·Î º¯¼ö xÀÇ °ªÀ» ¸Þ¸ð¸®¿¡¼­ Àо´Â ¼ÀÀÌ µÈ´Ù. ±×·¯¹Ç·Î º¯¼ö xÀÇ °ª°ú Æ÷ÀÎÅÍ ¼ö½Ä *pxÀÇ °ªÀº ¿Ï ÀüÈ÷ ¼­·Î °°À» ¼ö ¹Û¿¡ ¾ø´Ù. ÀÌó·³ Æ÷ÀÎÅ͸¦ ¾²¸é ¾î¶°ÇÑ º¯¼ö(Áº¯°ª) ¶óµµ ±× °ªÀ» "°£Á¢ÀûÀ¸·Î" Àо ¼ö(ÂüÁ¶ÇÒ ¼ö) 2ÀÖ´Ù´Â °ÍÀÌ ÇÙ½É »çÇ× ÀÌ´Ù. [±×¸² 3] *pxÀÇ ÀÇ¹Ì --------------------------------------------------------------------- doubleÇü Æ÷ÀÎÅÍ º¯¼ö doubleÇü º¯¼ö px x +-------+ -+-+-+-+-+-+-+-+-+-+- | o | -+-+-+-+-+-+-+-+-+-+- +---+---+ | ¼ö½Ä *px | | | | | | | | ÂüÁ¶ +-----------------2------+-+-+-+-+-+-+-+ | | | | | | | | Àо +++++++++++++++++ +-+-+-+-+-+-+-+-+ ¼ö½ÄÀÇ °á°ú * ´ÜÇ× * ¿¬»êÀÚ´Â px°¡ °¡¸®Å°´Â * ¹øÁöºÎÅÍ 8¹ÙÀÌÆ® ¸¸Å­ÀÇ ³»¿ëÀ» Àо´Ù. * ÀÌ 8¹ÙÀÌÆ®ÀÇ ³»¿ëÀº doubleÇü * °ªÀ¸·Î Ãë±ÞµÈ´Ù. --------------------------------------------------------------------- ¿©±â±îÁö ±×·±2´ë·Î ÆľÇÇßÀ¸¸é ¾Æ·¡ÀÇ µÎ ¼ö½ÄÀ» Áö±ÝÂëÀº ¿ÏÀüÈ÷ ÀÌ ÇØÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. x, y°¡ doubleÇü º¯¼öÀÌ°í px°¡ doubleÇü Æ÷ÀÎÅÍ º¯ ¼öÀÏ ¶§, px = &x; <--- xÀÇ ¹øÁö°ªÀ» px¿¡ ´ëÀÔÇÑ´Ù. y = *px; <--- px°¡ °¡¸®Å°´Â À§Ä¡ÀÇ ³»¿ë(8¹ÙÀÌÆ®)À» Àо¾î y¿¡ ´ëÀÔÇÑ´Ù. °á±¹ À§ÀÇ µÎ ¼ö½ÄÀº ¹«¾ùÀ» ¶æÇϴ°¡? °á°úÀûÀ¸·Î´Â y = x¶ó´Â Çϳª ÀÇ ´ëÀԽİú ´Ù¸¦ ¹Ù ¾øÁö¸¸ ±× ´ëÀÔ °úÁ¤ÀÌ ÀüÇô ´Ù¸£´Ù. Áï À§ÀÇ µÎ ¼ö ½ÄÀº xÀÇ °ªÀ» º¯¼ö y¿¡ Á÷Á¢ÀûÀ¸·Î ´ëÀÔÇÏ´Â ´ë½Å Æ÷ÀÎÅÍ px¸¦ ÅëÇØ °£Á¢ 2ÀûÀ¸·Î ´ëÀÔÇÏ´Â ¹æ¹ýÀ» ½è´Ù. Á÷Á¢°ú °£Á¢ÀÇ Â÷ÀÌ¿¡ ÁÖ¸ñÇØ¾ß ÇÒ °ÍÀÌ´Ù. ±× Â÷ÀÌ´Â Æ÷ÀÎÅ͸¦ ¾µ ÁÙ ¾Æ´À³Ä ¸ð¸£³ÄÀÇ Â÷ÀÌ¿Í Áø¹è¾ø´Ù. 2.5 *px´Â º¯¼ö·Î Ãë±ÞµÈ´Ù ¿øÄ¢ÀûÀ¸·Î³ª »ó½ÄÀûÀ¸·Î º¼ ¶§ ¾î¶°ÇÑ ¿¬»êÀÚ(¹°·Ð [ ]³ª .°°Àº ±âº» ¿¬»êÀÚ´Â Á¦¿Ü)¶óµµ ´ëÀÔ ¿¬»êÀÚ =ÀÇ Áº¯¿¡ °áÄÚ ³ªÅ¸³¯ ¼ö ¾ø´Ù´Â »ç½Ç Àº Áö´çÇÑ ¾ê±âÀÌ´Ù. ¿¹ÄÁµ¥ a + b = 3À̶ó´Â ´ëÀÔ½ÄÀº ±¸¹® ¿¡·¯¸¦ À¯¹ß ÇÑ´Ù. ±×·¯³ª ´Ü ÇÑ °¡Áö ¿¹¿Ü°¡ ÀÖ´Ù. ´ÜÇ× * ¿¬»êÀÚ´Â =ÀÇ Áº¯¿¡ ³ªÅ¸³¯ ¼ö ÀÖ´Ù. ±×·¸´Ù¸é = Áº¯¿¡ ÀÖ´Â *´Â ÀÌ¹Ì 2°£Á¢ÁöÁ¤ ¿¬»êÀڷμ­ÀÇ º»·¡ÀÇ ¿ªÇÒÀÌ ¾Æ´Ñ ¶Ç ´Ù¸¥ ¿ªÇÒÀ» ÇÏ°í ÀÖ´Ù°í º¸´Â °ÍÀÌ Å¸´çÇÏ´Ù. ±×·¸´Ù¸é ¾Æ·¡ÀÇ ´ëÀÔ½ÄÀº ¹«¾ùÀ» ÀǹÌÇÏ´Â °ÍÀϱî? *px = 3.14; À§ÀÇ ´ëÀÔ½ÄÀº Á¤È®ÇÏ°Ô ´ÙÀ½°ú °°Àº ¶æÀ» °¡Áö°í ÀÖ´Ù. "doubleÇü Æ÷ÀÎÅÍ º¯¼ö px¿¡ ÀúÀåµÇ¾î ÀÖ´Â ¹øÁö°ªÀ» ÂüÁ¶ÇÏ¿© ±× ¹ø ÁöºÎÅÍ 8¹ÙÀÌÆ® Å©±âÀÇ ¸Þ¸ð¸®¿¡ ºÎµ¿ »ó¼ö 3.14¸¦ ÀúÀåÇÑ´Ù." ÀÌ ¸»À» Æ÷ÀÎÅÍÀÇ °³³äÀ» ½á¼­ °£°áÇÏ°Ô ´Ù½Ã Ç¥ÇöÇÏ¸é ´ÙÀ½°ú °°´Ù. "Æ÷ÀÎÅÍ px°¡ °¡¸®Å°´Â ¹øÁö¿¡ 3.14¸¦ ÀúÀåÇÑ´Ù." [±×¸² 4] ´2ëÀÔ½Ä *px = 3.14ÀÇ ÀÇ¹Ì --------------------------------------------------------------------- doubleÇü Æ÷ÀÎÅÍ º¯¼ö doubleÇü º¯¼ö px x +-------+ -+-+-+-+-+-+-+-+-+- | o | -+-+-+-+-+-+-+-+-+- +---+---+ ÂüÁ¶ | | | | | | | | | +-------------------+-+-+-+-+-+-+-+ | | |2 | | | | | ÀúÀåÇÔ +++++++++++++++++ +-+-+-+-+-+-+-+-+ ºÎµ¿ »ó¼ö 3.14 * px°¡ °¡¸®Å°´Â ¹øÁö¿¡ * 8¹ÙÀÌÆ® Å©±âÀÇ ºÎµ¿ »ó¼ö * 3.14¸¦ ÀúÀåÇÑ´Ù. --------------------------------------------------------------------- À§ÀÇ ¸»À» Àß À½¹ÌÇØ º¸¸é *px´Â ¸¶Ä¡ °ªÀ» ´ëÀÔÇÒ ¼ö ÀÖ´Â º¯¼ö(Áº¯ °ª)¿Í ¸¶Âù°¡Áö·Î Ãë±ÞµÈ´Ù´Â »ç½ÇÀ» ¾Ë ¼ö ÀÖ´Ù. ÀÌ ¶§¹®¿¡ *px´Â ´ë´ÜÇÑ ÀÀ¿ë¼ºÀ» °¡Áö°Ô µÈ´Ù. ±×°ÍÀº º¯¼ö(Áº¯°ª)°¡ ¾²ÀÏ ¼ö ÀÖ´Â °÷À̶ó¸é ¾î µðµ2çÁö ´Ù *px°¡ ¾²ÀÏ ¼ö Àֱ⠶§¹®ÀÌ´Ù. ¾î·°Å³ª [±×¸² 4]¿¡ º¸¿´µíÀÌ * px = 3.14´Â x¿¡ 3.14¸¦ Á÷Á¢ ´ëÀÔÇÏ´Â °Í°ú °°Àº °á°ú¸¦ °¡Á®¿ÈÀ» ¾Ë ¼ö ÀÖÀ» °ÍÀÌ´Ù(¹°·Ð ±× ´ëÀÔ °úÁ¤Àº ÀüÇô ´Ù¸§). Á÷Á¢ ´ëÀÔ °°Àº °á°ú °£Á¢ ´ëÀÔ x = 3.14; ------ px = &x; <---- xÀÇ ¹øÁö°ªÀ» px¿¡ ´ëÀÔ ------ *px = 3.14; <---- ±× ¹øÁö¿¡ 3.14¸¦ ÀúÀå ÇÑÆí ¼ö½Ä *pxÀÇ µ¥ÀÌÅÍÇüÀº px°¡ ¹«½¼Çü Æ÷ÀÎÅÍÀΰ¡¿¡ µû¶ó ´Þ¶óÁø ´Ù. ¿©±â¼­´Â px°¡ doubleÇü Æ÷ÀÎÅÍ º¯¼öÀ̹ǷΠ*px´Â ¸¶Ä¡ d2oubleÇü º¯¼ö ÀÎ °Íó·³ Ãë±ÞµÈ´Ù. µû¶ó¼­ *px¿¡ ´ëÀÔÇÏ°íÀÚ ÇÏ´Â °ªÀÌ doubleÇüÀÌ ¾Æ´Ò °æ¿ì¿¡´Â »ê¼ú º¯È¯(arithmetic conversion) ±ÔÄ¢¿¡ µû¶ó¼­ doubleÇüÀ¸·Î ÀÚµ¿ º¯È¯µÇ¾î *px¿¡ ´ëÀԵȴÙ. ÀÌÁ¦ "doubleÇü Æ÷ÀÎÅÍ º¯¼ö px°¡ °¡¸®Å°´Â ¹øÁöºÎÅÍ 8¹ÙÀÌÆ® ¿µ¿ª¿¡ ºÎµ¿ »ó¼ö 3.14¸¦ ÀúÀåÇÑ´Ù"¶ó´Â ¸»À» °£´ÜÈ÷ "*px¿¡ 3.14¸¦ ´ëÀÔÇÑ´Ù"¶ó ´Â ¸»·Î ´ë½ÅÇÒ °ÍÀÌ´Ï ¿ë¾î¿¡ Âø¿À¾ø±â ¹Ù¶õ´Ù. ±×¸®°í ¾ÕÀ¸·Î "doubleÇü Æ÷ÀÎÅÍ º¯¼ö px"¶ó´Â ¿ë¾î ´ë½Å¿¡ °¡±ÞÀûÀ̸é "doubleÇü Æ÷ÀÎÅÍ px"¶ó´Â ¿ë¾î¸¦ »ç¿ëÇÏ°ÚÀ¸´Ï¿ª½2à Âø¿À¾ø±â ¹Ù¶õ´Ù. ÀÌÇØ°¡ Àß ¾È µÇ¸é ½Ã°£À» µÎ°í õõÈ÷ Áö±Ý±îÁöÀÇ ³»¿ëÀ» ´Ù½Ã Çѹø À½¹ÌÇØ º¸±â ¹Ù¶õ´Ù. ÀÌÇØ°¡ ¾È µÈ´Ù°í Á¶±ÞÇØ Çϰųª ±ÞÇÏ°Ô ¼­µÎ¸¦ °Ç ¾ø´Ù(´Ù½Ã ÀÐÀ¸¸é µÇ´Ï±î). ´ÙÇàÈ÷ ÀÌÇØ°¡ µÇ¾ú´Ù¸é ¾Æ·¡ ¿ÞÆí ´Ù¼¸ ¹®Àå ÀÌ ÀǹÌÇÏ´Â ¹Ù¸¦ ¿ÏÀüÈ÷ ÆľÇÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ¿©±â¼­ x, y, temp°¡ do ubleÇü º¯¼öÀÌ°í px, py°¡ doubleÇü Æ÷ÀÎÅÍ º¯¼öÀÏ ¶§, px = &x; temp = x; py = &y; ---- x = y; temp = *px; ---- y = temp; *px = *2py; *py = temp; ¿ÞÆí°ú ¿À¸¥Æí µÎ ¼ö½Äµé ¸ðµÎ°¡ °á°úÀûÀ¸·Î´Â x¿Í yÀÇ °ªÀ» ¼­·Î ±³ ȯÇÏ´Â ÀÏÀ» ÇØÁØ´Ù. ±×·¸´Ù¸é Â÷¶ó¸® ¿À¸¥Æí°ú °°ÀÌ x, y¸¦ Á÷Á¢ ½á¼­ ó ¸®ÇÏÁö ¹«¾ùÇÏ·¯ º¹ÀâÇÏ°Ô Æ÷ÀÎÅ͸¦ ½á¼­ ó¸®Çϴ°¡ ÇÏ¸é ¹Ù·Î "Æ÷ÀÎÅ͸¦ ¾²¸é °£Á¢ÀûÀ¸·Î x, yÀÇ °ªÀ» º¯°æÇÒ ¼ö°¡ ÀÖ´Ù"´Â Á¡ ¶§¹®ÀÌ´Ù. ÀÌ Á¡À» ÀÌ¿ëÇÏ¿© ºñ·Î¼Ò ÇÔ¼öÀÇ (°¡»óÀûÀÎ) ½Ç¸Å°³º¯¼öÀÇ °ªÀ» (°£Á¢) º¯°æÇÏ´Â È¿°ú¸¦ ¾òÀ» ¼ö ÀÖ´Ù. 2.6 ½Ç¸Å°³º¯¼ö¸¦ º¯°æ½ÃÅ°´Â ÇÔ¼öÀÇ Á¤ÀÇ ¹æ¹ý ÀÌÁ¦ ½Ç¸Å°³º¯¼ö¸¦ º¯°æÇÏ´Â ÇÔ¼ö¸¦ ¸¸µé±â2 À§ÇÑ »çÀü Áö½ÄÀ» ¸ðµÎ °® Ãá ¼ÀÀÌ´Ù. ±×·¸´Ù¸é swapdouble ÇÔ¼ö¸¦ ´Ù½Ã ¸¸µé¾î º¸ÀÚ. ----------------------------------------------- ÇÔ¼ö Á¤ÀÇ(¸¸µå´Â) ¹æ¹ý ----------------------------------------------- void swapdouble(double *px, double *py) { double temp; temp = *px; *px = *py; *py = temp; } ----------------------------------------------- <»ç¿ë ¿¹ 1> a, b°¡ doubleÇü º¯¼öÀÏ ¶§ a = 1.0; +---+---¹øÁö ¿¬»êÀÚ¸¦ ½á¾ß ÇÑ´Ù. b = 2.0; | | swapdouble(&a, &b2); ----------------------------------------------- <»ç¿ë ¿¹ 2> pa, pb°¡ doubleÇü Æ÷ÀÎÅÍ º¯¼öÀÏ ¶§ a = 1.0; b = 2.0; pa = &a; +---+-----¹øÁö ¿¬»êÀÚ¸¦ ¾²¸é ¾È µÈ´Ù. pb = &b; | | swapdouble(pa, pb); ----------------------------------------------- °á°ú °ªÀÌ ¼­·Î ¹Ù²î¾î a´Â 2.0, b´Â 1.0À¸·Î µÈ´Ù. ----------------------------------------------- <»ç¿ë ¿¹ 1>À» º¸¸é swapdouble ÇÔ¼ö¸¦ È£ÃâÇÒ ¶§ ½Ç¸Å°³º¯¼ö·Î &a, & b¸¦ »ç¿ëÇß´Ù. ÀÌ°ÍÀº a, bÀÇ °ªÀ» ÇÔ¼ö¿¡ ±×´ë·Î Àü´ÞÇÏ´Â °ÍÀÌ 2¾Æ´Ï¶ó a ¿Í b°¡ ÀúÀåµÇ¾î ÀÖ´Â °÷ÀÇ ¼±µÎ¹øÁö°ªÀ» ÇÔ¼ö¿¡ Àü´ÞÇÏ´Â °ÍÀÌ´Ù. ÀÌÁ¦ swapdouble ÇÔ¼ö´Â ½Ç¸Å°³º¯¼ö·Î ÁöÁ¤ÇÑ Æ÷ÀÎÅÍ ¼ö½Ä &a¿Í &bÀÇ °ªÀ» Çü½Ä¸Å°³º¯¼ö px, py¿¡ º¹»ç¹Þ¾Æ¼­, ÇÔ¼ö ³»¿¡¼­´Â px, py¸¦ °¡Áö°í ÀÏÀ» ó¸®ÇÑ´Ù. À̶§ px, pyµµ ¿ª½Ã º¹»ç¹ÞÀº °ª¿¡ ºÒ°úÇϹǷΠpx, py ÀÚ Ã¼¸¦ º¯°æÇÏ´Â °ÍÀº ½Ç¸Å°³º¯¼ö &a, &b¿Í ¾Æ¹«·± »ó°üÀÌ ¾ø´Ù. »ç½Ç ½Ç¸Å °³º¯¼ö°¡ ¼ö½ÄÀ̹ǷΠº¯°æÇÒ ¼öµµ ¾ø´Ù. ±×·¯³ª *px, *py¸¦ º¯°æÇÏ´Â °ÍÀº ¾î¶² °á°ú¸¦ °¡Á®¿Ã±î? ¾Õ¿¡¼­ ½Éµµ ÀÖ°Ô ¼³¸íÇÑ ¹Ù ÀÖµíÀÌ (Çü½Ä¸2Å°³)º¯¼ö px, py°¡ &a, &b¶ó´Â ¹øÁö°ª(Æ÷ÀÎ ÅÍ)À» º¹»ç¹Þ¾Æ º¸°üÇÏ°í ÀÖÀ¸¹Ç·Î *px, *py´Â °á±¹ *(&a), *(&b)°¡ µÇ´Â ¼ÀÀÌ°í, ÀÌ°Í¿¡ ¾î¶² Á¶ÀÛÀ» °¡ÇÑ´Ù´Â °ÍÀº °ð °£Á¢ÀûÀ¸·Î º¯¼ö a, bÀÇ °ª À» º¯°æÇÏ´Â °á°ú¸¦ °¡Á®¿Â´Ù. ÀÌ»ó°ú °°ÀÌ C°¡ ÇÔ¼ö¿¡ ¸Å°³º¯¼ö Àü´ÞÇÏ´Â ¹æ½ÄÀÎ °ª¿¡ ÀÇÇÑ È£Ãâ(ca ll by value) ¿øÄ¢¿¡ ÀüÇô ¾î±ß³²ÀÌ ¾øÀÌ ¿©ÀüÈ÷ ½Ç¸Å°³º¯¼ö &a, &b´Â º¯ °æµÇÁö ¾Ê¾Ò´Ù. ´Ù¸¸ Æ÷ÀÎÅÍ¿¡ ÀÇÇÑ °£Á¢ÁöÁ¤(indirection)¿¡ ÀÇÇÏ¿© º¯¼ö a, b°¡ ¿ø°Ý Á¶Á¤À¸·Î º¯°æµÇ¾úÀ» »ÓÀÌ´Ù. ¿©ÇÏÆ° °£¿¡ ¸¶Ä§³» Ç2Ô¼ö È£Ãâ swapdouble(&a, &b)¿¡ ÀÇÇÏ¿© º¯¼ö a, bÀÇ °ªÀÌ º¯°æ(±³È¯)µÇ¾ú´Ù. À̶§ °ü½À»ó ¾ÕÀ¸·Î´Â &a, &b°¡ ¾Æ´Ï¶ó a, b ¸¦ ½Ç¸Å°³º¯¼ö·Î °¡Á¤Çϱâ·Î ÇÏÀÚ. ÀÌ·¸°Ô ´ÜÇ× & ¿¬»êÀÚ¸¦ Á¦¿ÜÇÑ a, b¸¦ ÆíÀÇÀûÀÎ ½Ç¸Å°³º¯¼ö·Î °£ÁÖÇÏÀÚ°í ¾à¼ÓÇϸé "swapdouble ÇÔ¼ö¿¡ ÀÇÇØ ½Ç ¸Å°³º¯¼ö a, b°¡ º¯°æµÇ¾ú´Ù"¶ó´Â ¸»À» ÇÒ ¼ö ÀÖ°Ô µÈ´Ù. ÀÌÁ¦ºÎÅÍ´Â ½Ç¸Å °³º¯¼ö¸¦ º¯°æÇÑ´Ù´Â ¸»ÀÌ ¿ë¾î Àǹ̴ë·ÎÀÇ ½Ç¸Å°³º¯¼ö¸¦ º¯°æÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó Æ÷ÀÎÅÍ°¡ °¡¸®Å°´Â °¡»óÀûÀÎ ½Ç¸Å°³º¯¼ö¸¦ º¯°æÇÏ´Â °ÍÀÓ¿¡ À¯³äÇÏ ±â ¹Ù¶õ´Ù. ÇÑÆí <»ç¿2뿹 2>´Â <»ç¿ë¿¹ 1>°ú ¿ÏÀüÈ÷ µ¿ÀÏÇÑ °á°ú¸¦ °¡Á®¿Â´Ù. swa pdouble ÇÔ¼ö¿¡ ½Ç¸Å°³º¯¼ö¸¦ ÁöÁ¤ÇÒ ¶§ ¿Ö pa, pb ¾Õ¿¡´Ù ´ÜÇ× & ¿¬»êÀÚ ¸¦ ¾²Áö ¾Ê¾ÒÀ»±î? ±× ÀÌÀ¯´Â ÀÌ¹Ì pa, pb ÀÚü°¡ Æ÷ÀÎÅÍ º¯¼ö·Î¼­ ¹øÁö°ª À» °¡Áö°í Àֱ⠶§¹®ÀÌ´Ù. Áï pa == &a, pb == &bÀ̹ǷΠpa, pb¿¡´Â ´ÜÇ× & ¿¬»êÀÚ¸¦ ´õ ºÙÀÏ ÇÊ¿äµµ ¾ø°í ºÙ¿©¼­µµ ¾È µÈ´Ù. --------------------------------------------------------------------- ½Ç¸Å°³º¯¼ö¸¦ º¯°æÇÏ´Â ÇÔ¼ö¸¦ Á¤ÀÇÇÏ´Â ¹æ¹ý(¸¸µå´Â ¹æ¹ý) ---------------------------------------------2------------------------ ÇÔ¼ö¸¦ Á¤ÀÇÇÒ ¶§ º¯°æÇÏ°íÀÚ ÇÏ´Â (°¡»óÀûÀÎ) ½Ç¸Å°³º¯¼ö¿¡ ´ëÀÀÇÏ´Â Çü½Ä¸Å°³º¯¼ö¸¦ Æ÷ÀÎÅÍ º¯¼ö·Î ¼±¾ðÇÑ´Ù. ¿¹ÄÁ´ë ±× ½Ç¸Å°³º¯¼öÀÇ µ¥ÀÌÅÍ ÇüÀÌ TÇüÀ̸é Çü½Ä¸Å°³º¯¼ö¸¦ TÇü Æ÷ÀÎÅÍ·Î ¼±¾ðÇÑ´Ù. ±×·± ´ÙÀ½ ÇÔ¼ö¸¦ È£ÃâÇÒ ¶§ º¯°æÇÏ°íÀÚ ÇÏ´Â (°¡»óÀûÀÎ) ½Ç¸Å°³º¯¼ö ¿¡ ¹øÁö ¿¬»êÀÚ &¸¦ ºÙÀδÙ. Âü°í·Î Æ÷ÀÎÅÍ º¯¼ö¸í¿¡´Â ´ë°³ Á¢µÎ»ç³ª Á¢ ¹Ì»ç·Î 'p'¸¦ µ¡ºÙÀÌ´Â °ÍÀÌ °ü·ÊÀÌ´Ù. ¸Å°³º¯¼ö ¸®½ºÆ®ÀÇ ¿¹ ½ÇÁ¦ È£Ãâ ¿¹ º¯°æµÇ´Â ´ë»ó void func(int *pa, i2nt *pb) func(&a, &b) a, b void test(int a, double *px) test(a, &x) x void copy(double x, double *py) copy(x, &y) y ½Ç¸Å°³º¯¼ö¸¦ º¯°æÇÏ·Á¸é Æ÷ÀÎÅÍÀÎ Çü½Ä¸Å°³º¯¼ö ¾Õ¿¡ °£Á¢ÁöÁ¤ ¿¬»ê ÀÚ *¸¦ ½á¼­ °Å±â¿¡ ¿øÇÏ´Â ¼ö½ÄÀ» ´ëÀÔÇÏ¸é µÈ´Ù. ¿¹) °ö¼À ¿¬»êÀÚ -----+ +------- °£Á¢ÁöÁ¤ ¿¬»êÀÚ | | *pa = *pb * *pb; (°ö¼À ¿¬»êÀÚ¿Í °£Á¢ÁöÁ¤ ¿¬»êÀÚ¸¦ ±¸ºÐ) *px = (double)a; *py = x; --------------------------------2------------------------------------- ÀÌ¿Í °°ÀÌ ½Ç¸Å°³º¯¼ö¸¦ º¹»çÇÏÁö ¾Ê°í ´ë½Å ±× ½Ç¸Å°³º¯¼ö¸¦ °¡¸®Å° ´Â Æ÷ÀÎÅÍ(¹øÁö°ª)¸¦ ÇÔ¼ö¿¡ Àü´ÞÇÏ´Â ¹æ½ÄÀ» "ÂüÁ¶¿¡ ÀÇÇÑ È£Ãâ(call by reference)"À̶ó°í ÇÑ´Ù. ±×·¯³ª °Åµì ¹Ýº¹ÇÏ¿© °­Á¶ÇÏÁö¸¸ C¿¡¼­´Â ÂüÁ¶ ¿¡ ÀÇÇÑ È£Ãâµµ ¾îÂ÷ÇÇ °ª¿¡ ÀÇÇÑ È£Ãâ(call by value)¿¡ ÀÇÇÏ¿© ±¸ÇöµÇ´Â °Í »ÓÀÓÀ» À¯ÀÇÇØ¾ß ÇÑ´Ù. ±×°ÍÀº Æ÷ÀÎÅÍ(¹øÁö°ª) ÀÚüµµ ¿ª½Ã º¹»çµÇ¾î ÇÔ¼ö·Î Àü´ÞµÇ±â ¶§¹®ÀÌ´Ù. µû¶ó¼­ (°¡»óÀûÀÎ) ½Ç¸Å°³º¯¼ö¸¦ º¯°æÇϱâ À§ÇØ ÇÔ¼ö¿¡ ±× Æ÷ÀÎÅ͸¦ À2ü´ÞÇÏ´Â °ÍÀº ¾îµð±îÁö³ª ÀüÀûÀ¸·Î ÇÁ·Î±×·¡¸ÓÀÇ Ã¥ÀÓÀÌ´Ù. C°¡ Á¦ ½º½º ·Î Æ÷ÀÎÅ͸¦ ì°Ü¼­ Àü´ÞÇØÁÖ´Â ÀÏÀº Àý´ë ¾ø´Ù. Áï C´Â ÇÁ·Î±×·¡¸Ó°¡ ½Ã Å°´Â ´ë·Î¸¸ ÇÒ »ÓÀÌ´Ù. ¸¸¾à¿¡ Æ÷ÀÎÅ͸¦ °Ç³×Áִµ¥ ÇÊ¿äÇÑ ´ÜÇ× & ¿¬»ê ÀÚ¸¦ ½Ç¼ö·Î ºü¶ß¸®°Å³ª, ¾Æ´Ï¸é ÇÊ¿ä¾ø´Âµ¥ ¾µµ¥¾øÀÌ ±¦È÷ µ¡ºÙ¿©¼­ ¸ðÁ¾ ÀÇ ½É°¢ÇÑ »çÅ°¡ ¹ß»ýÇÑ´Ù ÇÒÁö¶óµµ (ƯÈ÷ scanf ÇÔ¼ö »ç¿ë½Ã) ±×°ÍÀº ÇÁ ·Î±×·¡¸Ó°¡ ¾óºüÁø Çü±¤µîÀÌ¶ó¼­ ±×·± °ÍÀÌÁö C°¡ Çã¼úÇÏ°í ¹«´ÉÇؼ­ ±×·± °ÍÀº °áÄÚ ¾Æ´Ï¶ó´Â Á¡À» Àç»ïÀç»ç °­Á¶ÇÏ°í ½Í´Ù. ÀÌ°ÍÀ¸·Î¼­ ½Ç¸Å°³º¯2¼ö¸¦ º¯°æÇÏ´Â ÇÔ¼ö¸¦ ¸¸µå´Â ¹æ¹ýÀ» ¸ðµÎ ¼³¸íÇß ´Ù. ¿À´ÃÀº À̸¸ ½¬°í, ´ÙÀ½ÀÇ ´ÙÂ÷¿ø ¹è¿­ Æ÷ÀÎÅÍ¿¡ °üÇÑ ¼³¸íÀº °ñÄ¡ ²Ï ³ª ½âÈ÷´Â ³»¿ëÀ̹ǷΠ³»ÀÏÂëºÎÅÍ Àо°¡±â ¹Ù¶õ´Ù. ´ÙÀ½ ±Û·Î °è¼Ó À̾îÁý´Ï´Ù. turbo28 Åͺ¸ÀÌ»¡ ÀÓ ÀÎ °Ç #33 ÀÓÀ롂 (turbo28 ) [°­ÁÂ] CÆ÷ÀÎÅÍ3-3: ´ÙÂ÷¿ø ¹è¿­ Æ÷ÀÎÅÍ 03/06 00:57 218 line --------------------------------------------------------------------- 3 ´ÙÂ÷¿ø ¹è¿­ Æ÷ÀÎÅÍÀÇ °³¿ä --------------------------------------------------------------------- 3.1 ´ÙÂ÷¿ø ¹è¿­ Æ÷ÀÎÅͶõ? ¿ì¸®´Â ÀÌ¹Ì Áö³­ ´Þ°ú ¾îÁ¦Âë¿¡ Æ÷ÀÎÅÍÀÇ ±âÃʸ¦ °ÅÀÇ ´ëºÎºÐ ¹è¿ü ´Ù. ±âÃÊÄ¡°í´Â ½±Áö°¡ ¾Ê¾Æ¼­ °³³ä Àâ±â°¡ ¿µ Èûµé´Ù°í ÇÒ Áöµµ ¸ð¸£°ÚÀ¸ ³ª ÀÌÁ¦ºÎÅÍ¿Í ´ÙÀ½ ´Þ¿¡ ºñÇÏ¸é ±× Á¤µµ´Â »õ¹ßÀÇ ÇÇ´Ù. ÀÌÁ¦´Â C ¾ð¾îÀÇ ¹®¹ý ü°è Àüü¸¦ ÅëƲ¾î¼­ °¡Àå Èûµç ³­°øºÒ¶ôÀÇ ¿ä »õÀÌÀÚ ÅÂÃÊÀÇ Ä«¿À½º¸¦2 ¹æºÒÄÉ Çϴ ȥµ·ÀÇ ¿¬¼ÓÀÎ "´ÙÂ÷¿ø ¹è¿­°ú Æ÷ÀÎ ÅÍ¿ÍÀÇ °ü°è"¿¡ ´ëÇÏ¿© ¾Ë¾Æº¼ Â÷·ÊÀÌ´Ù. Á¦ÀÏ ¸ÕÀú ´ÙÂ÷¿ø ¹è¿­À̶ó´Â °³ ³ä ÀÚü¸¦ »Ñ¸®Ã¤ µÚÈçµå´Â ÀÛ¾÷ºÎÅÍ Âø¼öÇÏ°Ú´Ù. ±× ÀÌÀü¿¡ ¸ÕÀú ÀÌ ±Û Àüü¿¡ °ÉÃÄ µÎ·ç ¾²ÀÏ ¹è¿­ x, y, zÀÇ Á¤ÀÇ¿¡ ´ëÇÏ¿© ¾ð±ÞÇÏ°Ú´Ù. int x[3]; <--- ÀÏÂ÷¿ø ¹è¿­ÀÇ Á¤ÀÇ int y[3][2]; <--- ÀÌÂ÷¿ø ¹è¿­ÀÇ Á¤ÀÇ int z[3][2][2]; <--- »ïÂ÷¿ø ¹è¿­ÀÇ Á¤ÀÇ ¾Æ¿ï·¯ Àá½Ã ÈÄ ¼³¸íÇÏ°ÚÁö¸¸ °¢ ¹è¿­¿¡ ´ëÀÀÇÏ´Â ¹è¿­ Æ÷ÀÎÅÍ px, p y, pzÀÇ Á¤Àǵµ Âü°íÇϱ⠹ٶ2õ´Ù. int *px; <--- ÀÏÂ÷¿ø ¹è¿­ Æ÷ÀÎÅÍÀÇ Á¤ÀÇ int (*py)[2]; <--- ÀÌÂ÷¿ø ¹è¿­ Æ÷ÀÎÅÍÀÇ Á¤ÀÇ int (*pz)[2][2]; <--- »ïÂ÷¿ø ¹è¿­ Æ÷ÀÎÅÍÀÇ Á¤ÀÇ ÀÌ ±Û¿¡¼­ ¿¹·Î µé°í ÀÖ´Â ¸ðµç ¹è¿­°ú ¹è¿­ Æ÷ÀÎÅÍ´Â À§ÀÇ 6°¡Áö »Ó À̹ǷÎ, ¼³¸íÀÇ ÆíÀǸ¦ À§Çؼ­ ¹è¿­ x, y, z³ª ¹è¿­ Æ÷ÀÎÅÍ px, py, pzÀÇ Á¤ÀǸ¦ ÀÏÀÏÀÌ ¹àÈ÷Áö ¾ÊÀ» Å×´Ï ¾ÕÀ¸·Î È¥µ¿ ¾ø±â ¹Ù¶õ´Ù. ¶ÇÇÑ ¹è¿­ Æ÷ ÀÎÅÍ px, py, pz´Â ¾Æ·¡¿Í °°ÀÌ ¹Ì¸® ÃʱâÈ­µÇ¾î ÀÖ´Ù°í °¡Á¤ÇÑ´Ù. px = x; py = y; pz = z; º°µ2µÀÇ ¾ð±ÞÀÌ ¾ø´Â ÇÑ, Æ÷ÀÎÅÍ º¯¼ö px, py, pz´Â ¾ðÁ¦³ª À§¿Í °°ÀÌ ÃʱâÈ­µÇ¾î ÀÖ´Ù°í °¡Á¤ÇÏ°í ¼³¸íÀ» Çسª°¥ °ÍÀ̱⠶§¹®¿¡ Æ÷ÀÎÅÍ º¯¼ö p x, py, pzÀÇ ÃʱâÄ¡¸¦ ÀÏÀÏÀÌ ¹àÈ÷Áö ¾ÊÀ» °ÍÀÌ´Ù. ±×·¯´Ï±î º»¹® Áß¿¡¼­ px, py, pz°¡ ÃʱâÈ­µÇÁö ¾Ê°í¼­ ¾²¿´´Ù´Â ¿ÀÇØ´Â »ï°¡ÇØ ÁÖ¾úÀ¸¸é ÇÑ´Ù. 3.2 ¹è¿­ÀÇ ¹è¿­°ú ºÎºÐ¹è¿­ C¿¡¼­ ´ÙÂ÷¿ø ¹è¿­Àº ¹®¹ýÀûÀ¸·Î ÈçÈ÷ ¹è¿­ÀÇ ¹è¿­À̶ó°í ºÒ¸®¿î´Ù. ±×°ÍÀº ¼øÀüÈ÷ ¾Æ·¡ÀÇ 2°¡Áö ÀÌÀ¯ ¶§¹®ÀÌ´Ù. ---- ¹è¿­ÀÇ Àü¸ð ---------------------------------------------------2- [1] C´Â ÀÏÂ÷¿ø ¹è¿­¸¸À» Áö¿øÇÑ´Ù. º»·¡ Àǹ̴ë·ÎÀÇ ´ÙÂ÷¿ø ¹è¿­Àº C¿¡ ÀüÇô Á¸ÀçÇÏÁö ¾Ê´Â´Ù. ¶ÇÇÑ ¹è¿­Å©±â´Â ¹Ýµå½Ã ÄÄÆÄÀÏÇÒ ¶§, »ó¼ö¿Í ¸¶Âù°¡Áö·Î °íÁ¤Àû(fixed)À̾î¾ß ÇÑ´Ù. Áï ¹è¿­Å©±â(°¢ ÷ÀÚÅ©±â)´Â ¹è¿­ÀÇ Á¤ÀÇ¿¡¼­ ¾î¶°ÇÑ ¹æ¹ýÀ¸·Îµç ¹Ýµå½Ã ¹Ì¸® ¾Ë·ÁÁ®¾ß ÇÑ´Ù. [2] ±× ´ë½Å ¹è¿­¿ä¼ÒÀÇ µ¥ÀÌÅÍÇü¿¡´Â Á¦ÇÑÀÌ ¾ø´Ù. --------------------------------------------------------------------- À§¿¡¼­ [1]¹ø ±ÍÀýÀº ¾î¶»°Ô º¸¸é ¾ÆÁÖ È²´çÇÑ ¹®±¸¶ó°íµµ º¼ ¼ö ÀÖ ´Ù. ±×µµ ±×·² °Í2ÀÌ ¸ðµç ¾ð¾î¿¡ ±âº»ÀûÀÌ°í ÇʼöÀûÀÎ ´ÙÂ÷¿ø ¹è¿­ÀÌ ¸·°­ ÇÑ C ¾ð¾î¿¡ Á¸ÀçÇÏÁö ¾Ê´Â´Ù´Ï ¸»µµ ¾È µÇ´Â ¼Ò¸®·Î µé¸®Áö ¾ÊÀ» ¼ö ¾øÀ» °ÍÀÌ´Ù. ±×·¯³ª [2]¹ø ±ÍÀýÀ» ÀÚ¼¼È÷ Àо¸é ±×°Ô ±×·¸Áö¸¸µµ ¾Ê´Ù´Â °ÍÀ» ´«Ä¡Ã§ ¼ö ÀÖ´Ù. ¹è¿­¿ä¼ÒÀÇ µ¥ÀÌÅÍÇü¿¡ Á¦ÇÑÀÌ ¾ø´Ù´Â ¸»Àº °ð, ÀϹÝÀûÀÎ º¯¼ö´Â ¹°·ÐÀÌ°í ¹è¿­ ±× ÀÚüµµ ¹è¿­¿ä¼Ò·Î ÃëÇÒ ¼ö ÀÖ´Ù´Â Àǹ̷ΠÇؼ® ÇÒ ¼ö ÀÖ´Ù. µû¶ó¼­ ±× ¹è¿­¿ä¼Ò ÀÚü°¡ ¹è¿­ÀÎ ÀÏÂ÷¿ø ¹è¿­·Î¼­ ´ÙÂ÷¿ø ¹è¿­À» ±¸Çö(simulate)ÇÒ ¼ö ÀÖ´Â ±Ù°Å¸¦ ¹ß°ßÇÏ°Ô µÈ´Ù. À̶§ °á°úÀûÀ¸·Î ´Â±2×·¸´õ¶óµµ C´Â ´ÙÂ÷¿ø ¹è¿­À̶ó´Â °³³äÀ» ÀüÇô ¸ð¸¦ »Ó¸¸ ¾Æ´Ï¶ó Áö¿ø ÇÏÁöµµ ¾Ê´Â´Ù´Â Á¡À» ²À ÀØÁö ¸»¾Æ¾ß ÇÑ´Ù. À̷νá C¿¡¼­ ´ÙÂ÷¿ø ¹è¿­À» "¹è¿­ÀÇ ¹è¿­(array of arrays)"À̶ó°í ºÎ¸£´Â ÀÌÀ¯¸¦ ´ë°­ ÁüÀÛÇÒ ¼ö ÀÖÀ¸¸®¶ó ¹Ï´Â´Ù. Áö±Ý±îÁö ¼³¸íÇßµíÀÌ ¹è ¿­ÀÇ ¹è¿­À̶ó´Â ¸»Àº "¹è¿­¿ä¼Ò°¡ ¹è¿­"À̶ó´Â Àǹ̸¦ °¡Áö°í ÀÖ´Ù. À̶§ ±× ¹è¿­¿ä¼Ò·Î¼­ÀÇ ¹è¿­À» "ºÎºÐ¹è¿­(subarray)"À̶ó°í ºÎ¸¥´Ù. ¿¹¸¦ µé¾î ÀÌÂ÷¿ø ¹è¿­¿¡¼­´Â [±×¸² 11.1-1]°ú °°ÀÌ ÀÌÂ÷¿ø ¹è¿­À» ±¸¼ºÇÏ´Â °¢°¢ÀÇ 1Â÷¿ø ¹è¿­µéÀÌ °ð ºÎºÐ¹è¿­ÀÌ´2Ù. [±×¸² 5] ºÎºÐ¹è¿­ÀÇ °³³ä --------------------------------------------------------------------- 3x2 ¹è¿­ y +-------+-------+-------+-------+-------+-------+ | | | | | | | +-------+-------+-------+-------+-------+-------+ ¹è¿­¿ä¼Ò [0][0] [0][1] [1][0] [1][1] [2][0] [2][1] | | | | | | +-------------+2 +------------+ +------------+ ºÎºÐ¹è¿­ y[0] ºÎºÐ¹è¿­ y[1] ºÎºÐ¹è¿­ y[2] --------------------------------------------------------------------- ºÎºÐ¹è¿­À̶ó´Â ¿ë¾î¸¦ »ç¿ëÇÏ¸é ´ÙÂ÷¿ø ¹è¿­Àº "¹è¿­¿ä¼Ò°¡ ºÎºÐ¹è¿­ ÀÎ ¹è¿­"À̶ó°í »ý°¢ÇÒ ¼ö ÀÖ´Ù. ±×¸®°í ´ÙÂ÷¿ø ¹è¿­ ±× ÀÚü´Â "¸ð¹è¿­" À̶ó°í ºÎ¸£±â·Î ÇÑ´Ù. »õ·Î ³ª¿Â ¿ë¾î°¡ ¾Æ¹« Å» ¾øÀÌ Á¢¼öµÆÀ¸¸é ¾Æ·¡ÀÇ ±Û±Í¸¦ ½ÉµµÀÖ°Ô À½¹ÌÇϱ⠹ٶõ´Ù. ---- CÀÇ ´ÙÂ÷¿ø ¹è¿­¿¡ ´ëÇÑ ±Ùº» °³³ä ------------------------ * ´ÙÂ÷¿ø2 ¹è¿­Àº ¹è¿­ÀÇ ¹è¿­·Î¼­ ±¸ÇöÇÑ´Ù. -------------------------------------------------------------- * ´ÙÂ÷¿ø ¹è¿­Àº ¹è¿­¿ä¼Ò°¡ ºÎºÐ¹è¿­ÀÎ ÀÏÂ÷¿ø ¹è¿­ÀÌ´Ù. nÂ÷¿ø ¹è¿­Àº ¹è¿­¿ä¼Ò°¡ n - 1Â÷¿ø ¹è¿­ÀÎ ÀÏÂ÷¿ø ¹è¿­ÀÌ´Ù. µû¶ó¼­ ÀÌÂ÷¿ø ¹è¿­Àº ¹è¿­¿ä¼Ò°¡ 1Â÷¿ø ¹è¿­ÀÎ ÀÏÂ÷¿ø ¹è¿­ÀÌ´Ù. -------------------------------------------------------------- * »ê¼úÇü¿¡¼­ À¯µµµÈ(derived) ÀÌÂ÷¿ø ¹è¿­ÀÇ °æ¿ì ¸ð¹è¿­ÀÇ ¹è¿­¿ä¼Ò´Â 1Â÷¿øÀÇ ºÎºÐ¹è¿­ÀÌ´Ù. ºÎºÐ¹è¿­ÀÇ ¹è¿­¿ä¼Ò´Â »ê¼úÇü º¯¼öÀÌ´Ù. ----------2---------------------------------------------------- »ïÂ÷¿ø ÀÌ»óÀÇ ´ÙÂ÷¿ø ¹è¿­ÀÇ °æ¿ì¿¡´Â ¸ð¹è¿­ÀÇ ºÎºÐ¹è¿­ ÀÚüµµ ¶Ç ´Ù¸¥ ºÎºÐ¹è¿­·Î ±¸¼ºµÈ´Ù. ¿¹¸¦ µé¾î »ïÂ÷¿ø ¹è¿­¿¡¼­ »ïÂ÷¿øÀÇ ¸ð¹è¿­Àº 2Â÷¿øÀÇ ºÎºÐ¹è¿­µé·Î ±¸¼ºµÇ¸ç, °¢°¢ÀÇ 2Â÷¿ø ºÎºÐ¹è¿­µéÀº ´Ù½Ã 1Â÷¿øÀÇ ºÎºÐ¹è¿­µé·Î ±¸¼ºµÈ´Ù. ÀÌ·± ½ÄÀ¸·Î ºÎºÐ¹è¿­ÀÌ ÁßøµÇ´Ù º¸¸é "ºÎºÐ¹è¿­ÀÇ ºÎºÐ¹è¿­ÀÇ .... ºÎºÐ¹è¿­ÀÇ ºÎºÐ¹è¿­"°ú °°ÀÌ, ºÎºÐ¹è¿­À» À̸§ÁöÀ» ¶§ ±× ¿ë¾î°¡ ¸Å¿ì ¹ø ÀâÇØÁö¹Ç·Î ÆíÀÇ»ó °¢ ºÎºÐ¹è¿­ÀÇ Æ÷ÇÔ °ü°è¿¡ µû¶ó ¾Æ·¡¿Í °°ÀÌ2 ºÎ¸£±â·Î ¾à¼ÓÇÏÀÚ. ¶ÇÇÑ ÀÌÈĺÎÅʹ Ưº°ÇÑ ¾ð±ÞÀÌ ¾ø´Â ÇÑ "¹è¿­¿ä¼Ò"¶ó´Â ¿ë¾î¸¦ ÃÖÇÏÀ§ ºÎºÐ¹è¿­ÀÇ ¹è¿­¿ä¼Ò¶ó´Â Àǹ̷ΠÇÑÁ¤ÇÏ¿© »ç¿ëÇÒ °ÍÀ̹ǷΠ¿ë¾î¿¡ Âø¿À ¾ø±â ¹Ù¶õ´Ù. --------------------------------------------------------------------- [1] ¸ð¹è¿­ÀÇ ¹è¿­¿ä¼Ò, Áï ¸ð¹è¿­ÀÇ Á÷¼Ó ºÎºÐ¹è¿­Àº ÃÖ»óÀ§ ºÎºÐ¹è¿­(Á¦ 1ºÎºÐ¹è¿­)ÀÌ´Ù. [2] ÃÖ»óÀ§ ºÎºÐ¹è¿­ÀÇ ¹è¿­¿ä¼Ò(ÇÏÀ§ ºÎºÐ¹è¿­)´Â Á¦2ºÎºÐ¹è¿­ÀÌ´Ù. [3] ÀϹÝÀûÀ¸·Î Á¦nºÎºÐ¹è¿­ÀÇ ¹è¿­¿ä¼Ò(ÇÏÀ§ ºÎºÐ¹è¿­)´Â Á¦(n + 1)ºÎºÐ ¹è¿­ÀÌ´Ù. [4]Æ÷2ÇÔ °ü°è»ó °¡Àå ÇÏÀ§ ±¸Á¶¸¦ ÀÌ·ç´Â ¹è¿­Àº ÃÖÇÏÀ§ ºÎºÐ¹è¿­À̸ç ÃÖ ÇÏÀ§ ºÎºÐ¹è¿­Àº Ç×»ó 1Â÷¿ø ¹è¿­ÀÌ´Ù. --------------------------------------------------------------------- 3.3 ¹è¿­ ¿¬»êÀÇ Çã¿Í ½Ç ÀÌÁ¦ºÎÅÍ´Â CÀÇ ¹è¿­¿¡ À־ ±× °³³ä»ó ´ë´ÜÈ÷ Áß¿äÇÑ À§Ä¡¸¦ Â÷Áö ÇÏ´Â ¹è¿­ ¿¬»ê°ú Æ÷ÀÎÅÍ ¿¬»êÀÇ »óÈ£ °ü°è¿¡ ´ëÇÏ¿© ¼³¸íÇÏ°Ú´Ù. À̶§ ¹è ¿­ ¿¬»ê(array operation)À̶õ ¼±¾ð¹®¿¡¼­ ¹è¿­À» Á¤ÀÇÇϰųª ¶Ç´Â ¼ö½Ä Áß¿¡¼­ ÷ÀÚ¸¦ ½á¼­ ¹è¿­¿ä¼Ò¸¦ ÂüÁ¶ÇÏ´Â ÀÏ(÷ÀÚ ¿¬»ê) µîµîÀ» ÃÑĪÇÑ´Ù. ¶Ç2ÇÑ Æ÷ÀÎÅÍ ¿¬»ê(pointer operation)Àº Æ÷ÀÎÅÍ¿¡ °ü°èµÈ ¸ðµç ¿¬»êÀ» ÃÑ ÄªÇÑ´Ù. ¿©±â¼­ ÇؾßÇÒ ÀÏÀº CÀÇ ¹è¿­¿¡ ´ëÇÑ ÆĽºÄ®À̳ª º£ÀÌÁ÷À¸·ÎºÎÅÍÀÇ ¼± ÀÔ°üÀ̳ª °íÁ¤°ü³äÀ» ¿ÏÀüÈ÷ ŸÆÄÇϴµ¥ ÀÖ´Ù. ȤÀÚ´Â ¹è¿­ ¿¬»êÀÌ Æ÷ÀÎÅÍ ¿¬»ê°ú ¿ÏÀüÈ÷ º°°³ÀÇ °ÍÀ¸·Î, ȤÀÚ´Â ÇÑ ¼ú ´õ ¶°¼­ ¹è¿­ ¿¬»ê°ú Æ÷ÀÎÅÍ ¿¬»êÀÌ Ã³À½ºÎÅÍ ³¡±îÁö ¿ÏÀüÈ÷ ȣȯ(º¯È¯) °¡´ÉÇÑ °ÍÀ¸·Î Áö´ëÇÑ Âø°¢À» ÇÏ´Â °æ¿ì°¡ Àִµ¥ ±×°Ô ´Ù óÀ½ºÎÅÍ Æ÷ÀÎÅ͸¦ ÀÍÈú ¶§ ÁÖ¸¶°£»ê½ÄÀÇ ¾û Å͸®·Î ¹è¿ö¼­ ±×·± °ÍÀÌ´Ù. ±×·¯¸é ÀÌÁ¦ºÎÅÍ Á¤½ÄÀ¸·Î È®½ÇÇÏ°Ô À2ÍÈú ¼ö ÀÖµµ·Ï ¾È³»ÇÏ°Ú´Ù. --------------------------------------------------------------------- * C¿¡¼­ °íÀ¯ÇÑ ¹è¿­ ¿¬»êÀº ¿ÀÁ÷ 2°¡Áö ¹Û¿¡ ¾ø´Ù. ù°, ±× ¹è¿­ÀÇ Å© ±â¸¦ °áÁ¤ÇÏ´Â °Í°ú µÑ°, ¹è¿­¸íÀ» ÀÌ¿ëÇÏ¿© ±× ¹è¿­ÀÇ 0¹ø° ¿ä¼Ò¸¦ °¡¸®Å°´Â Æ÷ÀÎÅÍ(¹øÁö°ª)¸¦ ¾ò´Â °ÍÀÌ ÀüºÎÀÌ´Ù. * ´Ù¸¥ ¸ðµç ¹è¿­ ¿¬»êÀº ½ÇÁ¦·Î´Â Æ÷ÀÎÅÍ ¿¬»êÀ» ÅëÇÏ¿© ÀÌ·ç¾îÁø´Ù. ¿¹ ¸¦ µé¾î °ÑÀ¸·Î´Â ¹è¿­ ¿¬»êó·³ º¸À̴ ÷ÀÚ ¿¬»ê(subscript operatio n)µµ »ç½ÇÀº Æ÷ÀÎÅÍ ¿¬»êÀÇ ´Ù¸¥ Ç¥Çö ¹æ½Ä¿¡ Áö³ªÁö ¾Ê´Â´Ù2. * ¶ÇÇÑ ¹è¿­ Àüü¸¦ Åë°·Î ÇÔ¼ö¿¡ Àü´ÞÇÏ´Â ¹æ¹ýÀº Á¸ÀçÇÏÁö ¾Ê´Â´Ù. ¿ª ½Ã Æ÷ÀÎÅ͸¦ ÅëÇÏ¿© °£Á¢ÀûÀ¸·Î Á¶ÀÛÀÌ ÀÌ·ç¾îÁø´Ù(±×·¯³ª ±¸Á¶Ã¼¸¦ ¾² ¸é Åëä·Î Àü´ÞÇÒ ¼öµµ ÀÖ´Ù). --------------------------------------------------------------------- C´Â °ÅÀÇ ´ëºÎºÐÀÇ ¹è¿­ ¿¬»êÀ» Æ÷ÀÎÅÍ ¿¬»êÀ¸·Î º¯È¯Çؼ­ ó¸®ÇÑ´Ù. µû¶ó¼­ °ÅÀÇ ¸ðµç ¹è¿­ ¿¬»êÀº Æ÷ÀÎÅ͸¸ °¡Áö°íµµ ÃæºÐÈ÷ Ç¥ÇöÇÒ ¼ö ÀÖ´Ù. ±×·¯³ª Æ÷ÀÎÅÍ·Î ³ªÅ¸³¾ ¼ö ¾ø´Â ¹è¿­ ¿¬»ê¸¸ÀÇ °íÀ¯ÇÑ ¿µ¿ªÀÌ ¹æ±Ý ¾ð±Þ ÇßµíÀÌ µü 2°¡Áö ÀÖ´Ù. ù°2, ¹è¿­À» Á¤ÀÇÇÒ ¶§ ±× ¹è¿­ÀÇ Å©±â¸¦ °áÁ¤ÇÏ´Â °ÍÀÌ Æ÷ÀÎÅͷδ ºÒ°¡´ÉÇÏ´Ù´Â Á¡°ú µÑ°, ¹è¿­¸íÀ¸·Î ÇÏ¿©±Ý ±× ¹è¿­ÀÇ 0¹ø° ¿ä¼Ò°¡ À§Ä¡ ÇÏ°í ÀÖ´Â ¸Þ¸ð¸®ÀÇ ¹øÁö°ªÀ» °¡Áöµµ·Ï ÇÏ´Â °Íµµ ¿ª½Ã Æ÷ÀÎÅͷΠǥÇö ºÒ °¡´ÉÇÏ´Ù´Â Á¡ÀÌ´Ù(10¿ùÈ£ÀÇ ¹è¿­ »ó¼ö ¼³¸íÀ» ÂüÁ¶). ¸»ÀÌ °ÅâÇÑ °Í °° ¾Æµµ »ç½Ç Á¶±Ý¸¸ »ý°¢Çغ¸¸é ´ç¿¬ÇÑ ¾ê±âÀÌ´Ù. ±× ÀÌ¿ÜÀÇ ¸ðµç ¹è¿­ ¿¬»êÀº ³»ºÎÀûÀ¸·Î ¸ðµÎ Æ÷ÀÎÅÍ ¿¬»êÀ¸·Î º¯È¯ÇÏ ¿© 󸮵ȴÙ. ½ÉÁö¾î´Â Ÿ¾ð¾î¿¡¼­ °íÀ¯ÇÑ ¹è¿­ ¿¬»ê¿¡ ¼ÓÇϴ ÷ÀÚ ¿¬»ê, Áï x[1]À̳ª y[2][1]°ú °°ÀÌ ÁöÁ¤µ2È Ã·ÀÚ¿¡ ÀÇÇØ ¹è¿­¿ä¼ÒÀÇ ¹øÁö°ªÀ» ¾Ë ¾Æ³»¾î ÂüÁ¶ÇÏ´Â ¿¬»ê±îÁöµµ C¿¡¼­´Â Æ÷ÀÎÅÍ ¿¬»êÀ¸·Î º¯È¯ÇÏ¿© ó¸®ÇÏ°í ÀÖ´Ù. ¿¹ÄÁµ¥ ÆĽºÄ®°ú °°Àº Ÿ¾ð¾î¿¡¼­´Â [ ]°¡ ÷ÀÚ¸¦ ÁöÁ¤Çϴµ¥ ¾²ÀÌ ´Â ±âÈ£¿¡ ºÒ°úÇÏÁö¸¸ C¿¡¼­´Â °°Àº ±â´ÉÀÇ [ ]°¡ ±âº» ¿¬»êÀÚ(primary op erator)¶ó°í ºÒ¸®¿ì´Â ¿¬»êÀÚ¿¡ ÀÏÁ¾ÀÓ¿¡ À¯ÀÇÇϱ⠹ٶõ´Ù. °á°úÀûÀ¸·Î º¼ ¶§, C¿¡¼­´Â ¹è¿­Ã·ÀÚÀÇ »ç¿ëÀÌ ¾îµð±îÁö³ª ¼±ÅÃÀûÀÌ ´Ù. ¹è¿­Ã·ÀÚ¸¦ »ç¿ëÇÒ °ÍÀÌ³Ä ¾Æ´Ï¸é ±×¿Í µ¿ÀÏÇÑ Æ÷ÀÎÅÍ ¼ö½ÄÀ¸·Î Ç¥Çö ÇÒ °ÍÀÌ³Ä ÇÏ´Â ¹®Á¦´Â ÀüÀûÀ¸·Î ÇÁ·Î±×·¡¸ÓÀÇ ±2âÈ£, °ü½À ¶Ç´Â ¼ö½Ä Ç¥Çö »óÀÇ °£Æí¼º ¿©ºÎ¿¡ ´Þ·ÁÀÖ´Ù. C¿¡¼­´Â ÷ÀÚ ¿¬»êÀÌ °ð Æ÷ÀÎÅÍ ¿¬»êÀ̶ó´Â Áõ°Å´Â ¾Æ·¡ <¿¹Á¦ 1>¿¡¼­ ã¾Æ º¼ ¼ö ÀÖ´Ù. ÆĽºÄ®À̳ª º£ÀÌÁ÷ÀÇ °íÁ¤°ü³äÀ¸·Î´Â »ó»óÀ» ºÒÇãÇϴ ÷ÀÚ »ç¿ë¿¹°¡ <¿¹Á¦ 1>¿¡ ÃâÇöÇÑ´Ù. <¿¹Á¦ 1> ÷ÀÚ ¿¬»êÀº Æ÷ÀÎÅÍ ¿¬»êÀÌ´Ù. --------------------------------------------------------------------- 01: void main(void) 02: { +----------------------- ¹è¿­ x¸¦ ÃʱâÈ­Çß´Ù. 03: int i, x[3] = {100, 200, 300}; 04: 05: for (2i = 0; i < 3; i++) 06: printf("%d ", x[i]); 07: for (i = 0; i < 3; i++) 08: printf("%d ", i[x]); --------+----- ÀÌ µÎ Çà¿¡ ÁÖ¸ñÇÒ °Í 09: for (i = 1; i <= 3; i++) | Àý´ë ¿¡·¯°¡ ¾Æ´Ô 10: printf("%d ", (i - 1)[x]); --+ 11: 12: printf("\n"); 13: } --------------------------------------------------------------------- ½ÇÇà °á°ú 100 200 300 100 200 300 100 200 300 --------------------------------------------------------------------- 2 <¿¹Á¦ 1>ÀÇ 8Çà°ú 10Çà¿¡ ÃâÇöÇÑ ¼ö½Ä¿¡¼­, ÀϹÝÀûÀÎ »ó½ÄÀ¸·Î´Â ¹è¿­ ¸íÀ» µÎ¾î¾ß ÇÑ´Ù°í »ý°¢µÇ´Â ÀÚ¸®¿¡ ÀÇ¿Ü·Î Á¤¼ö º¯¼ö(8Çà)´Â ¹°·Ð °ýÈ£ ¸¦ µ¿¹ÝÇÑ ÀÓÀÇÀÇ Á¤¼ö ¼ö½Ä(10Çà)À» ³õÀ» ¼öµµ ÀÖ´Ù´Â °ÍÀº ³î¶ó¿î »ç½Ç ÀÌ ¾Æ´Ò ¼ö ¾ø´Ù. ¹°·Ð ±× ´ë½Å¿¡ [ ] ¾È¿¡´Ù°¡ ¹è¿­¸íÀ» ³õ±â´Â ÇßÁö¸¸ ¸»ÀÌ´Ù. ÀÌ·¸°Ô »ý¼ÒÇÑ Ã·ÀÚ »ç¿ë¹ýµµ »ç½ÇÀº Áö³­ 10¿ùÈ£¿¡¼­ ÀÌ¹Ì ¿¹°í¸¦ ÇÑ °ÍÀÌ´Ù. 10¿ùÈ£ÀÇ "¹è¿­ ÂüÁ¶¿¡ °üÇÑ Á¤ÀÇ"¸¦ ÁÖÀDZí°Ô Àо¸é <¿¹Á¦ 1> ÀÇ ¼ö½ÄÀÌ Àý´ë·Î ±× Á¤ÀÇ¿¡ À§¹èµÇÁö ¾Ê´Â´Ù´Â »ç½ÇÀ» ¾Ë¾Æç ¼ö 2ÀÖÀ» °Í ÀÌ´Ù. Áö±Ý ´çÀå ÁøÂ¥ ±×·±Áö È®ÀÎÇØ º¸½Ã¶ó. ¾î·µç i[x]¿Í °°Àº ¼ö½ÄÀº CÀÇ Ã·ÀÚ ¿¬»êÀÌ ¹è¿­ ¿¬»ê¿¡ ¼ÓÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó Æ÷ÀÎÅÍ ¿¬»ê¿¡ ¼ÓÇÑ´Ù´Â °áÁ¤ÀûÀÎ Áõ°ÅÀÌ´Ù. ÆĽºÄ®À̳ª º£ÀÌÁ÷¿¡ ¼­´Â ÷ÀÚ ¿¬»êÀÌ °íÀ¯ÇÑ ¹è¿­ ¿¬»ê¿¡ ¼ÓÇϱ⠶§¹®¿¡ i[x], i++[x] °°Àº ¼ö½ÄÀº ±Ùº»ÀûÀ¸·Î Ç¥Çö ºÒ°¡´ÉÇÒ ¼ö ¹Û¿¡ ¾ø´Ù. Âü°í·Î C¿¡¼­´Â i++[x]¿Í °°Àº º°½º·± ¼ö½Äµµ Á¤ÀÇ¿¡ ÀÇÇÏ¿© x[i++]¿Í ¿ÏÀüÈ÷ µ¿ÀÏÇÑ ¼ö½ÄÀÌ´Ù. ´ÙÀ½ ±Û·Î °è¼Ó À̾îÁý´Ï´Ù. turbo28 Åͺ¸ÀÌ»¡ ÀÓ ÀÎ °Ç #34 ÀÓÀ롂 (turbo28 ) [°­ÁÂ] CÆ÷ÀÎÅÍ3-4: ´ÙÂ÷¿ø ¹è¿­ Æ÷ÀÎÅÍ 03/06 00:59 327 line 3.4 Æ÷ÀÎÅÍ »ý¼º¿¡ °üÇÑ Á¤ÀÇ¿Í ºÎºÐ¹è¿­¸íÀÇ ÀÇ¹Ì ¹è¿­¸í(¸ð¹è¿­¸í)ÀÌ ¼ö½Ä ³»¿¡¼­ ±× ¹è¿­ÀÇ 0¹ø° ¿ä¼Ò¸¦ °¡¸®Å°´Â Æ÷ ÀÎÅÍ·Î ¾²Àδٴ »ç½ÇÀº ¾ÕºÎºÐ°ú 10¿ùÈ£¿¡¼­ ÀÌ¹Ì ¾ð±ÞÇß´Ù. ¿©±â¼­´Â ¸ð ¹è¿­¸íÀº ¹°·Ð ºÎºÐ¹è¿­¸í±îÁöµµ Æ÷ÇÔÇÏ¿©, ÀϹÝÀûÀ¸·Î ÀÓÀÇÀÇ ¹è¿­¸íÀÌ ¼ö½Ä ³»¿¡ ÂüÁ¶µÉ ¶§ °¡Áö´Â Àǹ̿¡ ´ëÇÑ Á¤ÀǸ¦ ¼³¸íÇÏ°Ú´Ù. ---- Æ÷ÀÎÅÍ »ý¼º(pointer generation)¿¡ °üÇÑ Á¤ÀÇ I ------------------ ¸¸¾à ÁÖ¾îÁø ¼ö½ÄÀ̳ª ºÎ¼ö½ÄÀÇ µ¥ÀÌÅÍÇüÀÌ ÀÓÀÇÀÇ TÇü µ¥ÀÌÅÍ¿¡¼­ À¯ µµµÈ "TÇü ¹è¿­"À̶ó¸é, ±× ¼ö½ÄÀÇ °ªÀº ±× ¹è¿­ ³»ÀÇ Ã¹¹ø° ´ë»óü(0¹ø ° ¹è¿­¿ä¼Ò)¸¦ °¡¸®Å°´Â Æ÷ÀÎÅÍ(¹øÁö)°¡ µÈ´Ù. ±×¸®°í ±× ¼ö½ÄÀÇ µ¥ÀÌÅÍ ÇüÀº "TÇüÀ» °¡¸®Å°´Â Æ÷ÀÎÅÍ"·Î º¯°æµÈ´Ù. If the type of an expression or subexpression is "array of T", fo r some type T, then the value of the expression is a pointer to the f irst object in the array, and the type of the expression is altered t o "pointer to T". --------------------------------------------------------------------- ¼ö½ÄÀ̳ª ºÎ¼ö½ÄÀº ¹è¿­¸í ´Üµ¶À¸·Î ±¸¼ºµÉ ¼öµµ ÀÖ´Ù. ±×¸®°í º¯°æÀÌ ¶ó´Â ¸»Àº °³³äÀûÀÎ º¯È¯À» ÀǹÌÇÑ´Ù. Áï ½ÇÁ¦·Î º¯È¯À» À§ÇØ ±â°è¾î ÄÚµå °¡ ¸¸µé¾îÁöÁö´Â ¾Ê´Â´Ù. À§ÀÇ Á¤ÀÇ IÀ» ¹è¿­¸í¿¡ Àû¿ëÇÏ¿© Çؼ®À» À¯µµÇÑ ´Ù¸é ÇÑ ¸¶µð·Î ´ÙÀ½°ú °°´Ù. ¸ð¹è¿­À̳ª ºÎºÐ¹è¿­À» ¸··ÐÇÏ°í, "¼ö½Ä ³»ÀÇ ¹è¿­¸íÀº ±× ¹è¿­ÀÇ 0¹ø° ¿ä¼Ò¸¦ °¡¸®Å°´Â Æ÷ÀÎÅÍÀÌ´Ù." À§ÀÇ ¹®ÀåÀº Æ÷ÀÎÅÍ »ý¼º¿¡ °üÇÑ Á¤ÀÇ¿¡¼­ À¯µµÇس½ °á·ÐÀÌ´Ù. ±× À¯ µµ °úÁ¤Àº Àá½Ã ÈÄ¿¡ ¹àÈú °ÍÀÌ´Ù. ±×·¯¸é ºÎºÐ¹è¿­¸íÀº ½ÇÁ¦·Î ¾î¶»°Ô ³ª Ÿ³»´ÂÁö ¾Ë¾Æº¸ÀÚ. ¿¹ÄÁµ¥ ÀÌÂ÷¿ø ¹è¿­(¹è¿­ÀÇ ¹è¿­) y°¡ Á¤ÀǵǾî ÀÖ´Ù °í ÇÒ ¶§ y[0]´Â ¸ð¹è¿­ yÀÇ ¹è¿­¿ä¼ÒÀÎ ¾î¶² ºÎºÐ¹è¿­À» ÀǹÌ(´ëÇ¥)ÇÏ°Ô µÈ´Ù. Áï y[0]´Â ¸ð¹è¿­ yÀÇ 0¹ø° ºÎºÐ¹è¿­¸íÀÌ µÈ´Ù. À̸¦ ÀϹÝÀûÀ¸·Î Ç¥ÇöÇÏ¸é ¾Æ·¡¿Í °°´Ù. ----------------------------------------------------------------- ´ÙÂ÷¿ø ¹è¿­ array[size1][size2]......[sizen]ÀÌ Á¤ÀǵǾî ÀÖÀ» ¶§ ----------------------------------------------------------------- array[i1]´Â ÃÖ»óÀ§ ºÎºÐ¹è¿­¸íÀÌ´Ù. array[i1][i2]´Â Á¦2ºÎºÐ¹è¿­¸íÀÌ´Ù. ...... array[i1][i2]......[in-1]Àº ÃÖÇÏÀ§ ºÎºÐ¹è¿­¸íÀÌ´Ù. array[i1][i2]......[in-1][in]Àº ¹è¿­¿ä¼ÒÀÌ´Ù. ----------------------------------------------------------------- [±×¸² 6] ºÎºÐ¹è¿­ÀÇ °èÃþµµ --------------------------------------------------------------------- 3Â÷¿ø¹è¿­ --------> ¸ð¹è¿­ z +---------------------------------------------+ | | 2Â÷¿ø¹è¿­ ---> ºÎºÐ¹è¿­ z[0] ºÎºÐ¹è¿­ z[1] ºÎºÐ¹è¿­ z[2] +-------------+ +-------------+ +-------------+ | | | | | | +---+---+---+---+---+---+---+---+---+---+---+---+ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10| 11| 12| +---+---+---+---+---+---+---+---+---+---+---+---+ | | | | | | | | | | | | +-----+ +-----+ +-----+ +-----+ +-----+ +-----+ 1Â÷¿ø¹è¿­ --> z[0][0] z[0][1] z[1][0] z[1][1] z[2][0] z[2][1] --------------------------------------------------------------------- <¿¹Á¦ 2> ¼ö½Ä ³»¿¡¼­ ¾²ÀÎ ºÎºÐ¹è¿­¸íÀÇ ÀÇ¹Ì --------------------------------------------------------------------- #define printarrayname(expr) printf("%15s == %p\n\n", #expr, expr) #define printarraysize(expr) printf("%15s == %d\n", #expr, expr) void main(void) { int z[3][2][2] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}; printarrayname(z); printarrayname(z[0]); printarrayname(z[1]); printarrayname(z[2]); printarrayname(z[0][0]); printarrayname(z[0][1]); printarrayname(z[1][0]); printarrayname(z[1][1]); printarrayname(z[2][0]); printarrayname(z[2][1]); printarraysize(sizeof(z)); printarraysize(sizeof(z[0])); printarraysize(sizeof(z[1])); printarraysize(sizeof(z[2])); printarraysize(sizeof(z[0][0])); printarraysize(sizeof(z[0][1])); printarraysize(sizeof(z[1][0])); printarraysize(sizeof(z[1][1])); printarraysize(sizeof(z[2][0])); printarraysize(sizeof(z[2][1])); } --------------------------------------------------------------------- ½ÇÇà °á°ú(Åͺ¸ C 2.0¿¡¼­ ½ÇÇà) Æ÷ÀÎÅÍ°ª(¹øÁö°ª)Àº »óȲ¿¡ µû¶ó ´Þ¶óÁö¹Ç·Î ¿©±â¼­´Â ±× »ó´ëÀûÀÎ °ª¿¡¸¸ ÁÖ¸ñÇϵµ·Ï ÇÑ´Ù. z == FFC8 ---> z´Â 3x2x2 Å©±âÀÇ Á¤¼ö ¹è¿­ z[0] == FFC8 -+ +- +8 ---> z[0]´Â 2x2 Å©±âÀÇ Á¤¼ö ¹è¿­ z[1] == FFD0 -+ +- +8== 2 * 2 * sizeof(int) z[2] == FFD8 -+ z[0][0] == FFC8 -+ +- +4 ---> z[0][0]´Â ¹è¿­Å©±â 2ÀÇ Á¤¼ö ¹è¿­ z[0][1] == FFCC -+ +- +4 == 2 * sizeof(int) z[1][0] == FFD0 -+ +- +4 z[1][1] == FFD4 -+ +- +4 z[2][0] == FFD8 -+ +- +4 z[2][1] == FFDC -+ sizeof(z) == 24 ¡ç 3 * 2 * 2 * sizeof(int) sizeof(z[0]) == 8 sizeof(z[1]) == 8 ¡ç 2 * 2 * sizeof(int) sizeof(z[2]) == 8 sizeof(z[0][0]) == 4 ¡ç 2 * sizeof(int) sizeof(z[0][1]) == 4 sizeof(z[1][0]) == 4 sizeof(z[1][1]) == 4 sizeof(z[2][0]) == 4 sizeof(z[2][1]) == 4 --------------------------------------------------------------------- Æ÷ÀÎÅÍ »ý¼º¿¡ °üÇÑ Á¤ÀÇ IÀ» ÁÖÀDZí°Ô »ìÆ캸¸é <¿¹Á¦ 2>ÀÇ ½ÇÇà °á °ú¿¡ ¾à°£ÀÇ Àǹ®À» °¡Áú ¼ö ÀÖ´Ù. ±× Àǹ®À̶õ sizeof ¿¬»êÀÚ¿¡ °üÇÑ °Í ÀÌ´Ù. ¸¸¾à Á¤ÀÇ IÀ» sizeof ¼ö½Ä¿¡µµ ¸¶Âù°¡Áö·Î Àû¿ëÇÑ´Ù¸é sizeof(z)°¡ 24¶ó´Â °ªÀ» °¡Áú ¼ö´Â ¾ø´Ù. Á¤ÀÇ I¿¡ µû¸£¸é z°¡ Æ÷ÀÎÅÍ·Î ÀÚµ¿ º¯È¯µÈ ´Ù°í ÇßÀ¸¹Ç·Î sizeof(z)ÀÇ °á°ú´Â ¸¶¶¥È÷ Æ÷ÀÎÅÍÀÇ ¹ÙÀÌÆ® Å©±âÀÎ 2°¡ µÇ ¾î¾ß Çϱ⠶§¹®ÀÌ´Ù. ÀÌ ¹®Á¦Á¡À¸·Î ÀÎÇØ ¶Ç´Ù¸¥ º¸Ãæ Á¤ÀÇ°¡ ÇÊ¿äÇÏ°Ô µÈ ´Ù. ¾Æ·¡ÀÇ Æ÷ÀÎÅÍ »ý¼º¿¡ °üÇÑ Á¤ÀÇ II°¡ ¹Ù·Î ±×°ÍÀÌ´Ù. Á¤ÀÇ II¿¡ µû¸£ ¸é sizeof ¿¬»êÀÚÀÇ ÇÇ¿¬»êÀÚÀÎ ¹è¿­¸í z¿¡´Â Á¤ÀÇ I¿¡¼­¿Í °°Àº º¯È¯ÀÌ ÀϾÁö ¾ÊÀ¸¹Ç·Î, sizeof(z)¿¡¼­ zÀÇ µ¥ÀÌÅÍÇüÀÌ Æ÷ÀÎÅÍÇüÀ¸·Î º¯È¯µÇ´Â °ÍÀÌ ¾Æ´Ï¶ó ¹è¿­ÇüÀ» ±×´ë·Î À¯ÁöÇÏ°Ô µÈ´Ù. µû¶ó¼­ °á°ú´Â Æ÷ÀÎÅÍ ¼ö½Ä ÀÇ ¹ÙÀÌÆ® Å©±âÀÎ 2°¡ ¾Æ´Ñ ¹è¿­ zÀÇ ¹ÙÀÌÆ® Å©±âÀÎ 24°¡ ³ª¿À´Â °ÍÀÌ´Ù. ---- Æ÷ÀÎÅÍ »ý¼º(pointer generation)¿¡ °üÇÑ Á¤ÀÇ II ----------------- ¸¸¾à »ç¿ëÇÏ´Â ¼ö½ÄÀÌ ´ÜÇ× & ¿¬»êÀÚ, ++, --, ¶Ç´Â sizeof ¿¬»êÀÚÀÇ ÇÇ¿¬»êÀÚÀ̰ųª ´ëÀÔ ¿¬»êÀÚ ¶Ç´Â . ¿¬»êÀÚÀÇ ÁÂÃø ÇÇ¿¬»êÀÚ¶ó¸é Á¤ÀÇ I¿¡ ¼­¿Í °°Àº º¯È¯ÀÌ ÀϾÁö ¾Ê´Â´Ù. ±×¸®°í Á¤ÀÇ I¿¡¼­¿Í °°Àº º¯È¯À» ÀÏ ´Ü °ÅÄ£ ¼ö½ÄÀº ´õ ÀÌ»ó Áº¯°ª(lvalue)ÀÌ ¾Æ´Ï´Ù. Áï Æ÷ÀÎÅÍ ¼ö½ÄÀÌ´Ù. This conversion does not take place if the expression is the oper and of the unary & operator, or of ++, --, sizeof, or as the left ope rand of an assignment operator or the . operator. An expression that has suffered one of these conversions is not an lvalue. --------------------------------------------------------------------- 3.5 ¼ö½Ä *(*(y + i) + j)ÀÇ ºÐ¼® ¿ì¼± Áö±Ý±îÁö °£´ÜÈ÷ °³³ä¸¸ ¼Ò°³ÇÑ ´ë»óü(object)¿Í Áº¯°ª(lvalu e)¿¡ ´ëÇÑ ¾Æ·¡ÀÇ ¿ÏÀüÇÑ Á¤ÀǸ¦ ±â¾ïÇØ µÎ±â ¹Ù¶õ´Ù. Áº¯°ªÀ» ¿¹·Î µéÀÚ ¸é ÀÓÀÇÀÇ º¯¼ö³ª ¹è¿­¿ä¼Ò µîÀ» ²ÅÀ» ¼ö ÀÖ´Ù. Áº¯°ªÀº ´Ù½Ã ¸»Çؼ­ °ª À» ´ëÀÔÇÒ ¼ö ÀÖ´Â ¾î¶² °ÍÀ̶ó°í º¸¸é µÈ´Ù. ------------------------------------------------------------ ´ë»óü¶õ ±â¾ï Àå¼Ò ³»¿¡ À̸§ÀÌ ºÙ¿©Áø ¾î´À ¿µ¿ªÀ» ÀÏÄ´´Ù. An object is a named region of storage Áº¯°ªÀ̶õ ´ë»óü¸¦ ÂüÁ¶ÇÏ´Â ÀÓÀÇÀÇ ¼ö½ÄÀÌ´Ù. An lvalue is an expression referring to an object ------------------------------------------------------------ ´ë»óü¶ó´Â ¿ë¾î¸¦ »ç¿ëÇÏ¸é °£Á¢ÁöÁ¤ ¿¬»êÀÚ *´Â ÇÇ¿¬»êÀÚÀÎ Æ÷ÀÎÅÍ °¡ °¡¸®Å°°í ÀÖ´Â ´ë»óü¸¦ ±¸ÇÏ´Â ¿¬»êÀÚ¶ó°í °£´ÜÇÏ°Ô Á¤ÀÇÇÒ ¼ö ÀÖ´Ù. ´ÜÇ× * ¿¬»êÀÚÀÇ ¿ÏÀüÇÑ Á¤ÀÇ´Â ¾Æ·¡¿Í °°´Ù. ÀÌ Á¤ÀÇ¿¡¼­ ±¸Á¶Ã¼, ÇÔ¼ö µîµîÀ» °¡¸®Å°´Â Æ÷ÀÎÅͶó´Â ´ë¸ñÀº ³ªÁß¿¡ ¼³¸íÇÒ Å×´Ï Áö±ÝÀº ±×³É ¹«½Ã Çϱ⠹ٶõ´Ù. ¾Æ·¡¿¡¼­ ´ÜÇ× * ¿¬»ê½ÄÀÌ Áº¯°ªÀ̶ó´Â °ÍÀº º¯¼öó·³ ±×°÷ ¿¡ °ªÀ» ´ëÀÔÇÒ ¼öµµ ÀÖ´Ù´Â ¶æÀÌ´Ù. ---- °£Á¢ÁöÁ¤ ¿¬»êÀÚ *ÀÇ Á¤ÀÇ --------------------------------------- ´ÜÇ× * ¿¬»êÀÚ´Â °£Á¢ÁöÁ¤À» ³ªÅ¸³»¸ç ÇÇ¿¬»êÀÚ°¡ °¡¸®Å°°í ÀÖ´Â ´ë»ó ü³ª ÇÔ¼ö¸¦ ±¸ÇÑ´Ù. ¸¸¾à ÇÇ¿¬»êÀÚ°¡ »ê¼úÇü, ±¸Á¶Ã¼Çü, °ø¿ëüÇü, Æ÷ÀÎ ÅÍÇü(¹è¿­¸í Æ÷ÇÔ) µîÀ» °¡¸®Å°´Â Æ÷ÀÎÅͶó¸é, Áï ÇÇ¿¬»êÀÚ°¡ ÇÔ¼öÇüÀ̳ª voidÇüÀÌ ¾Æ´Ñ µ¥ÀÌÅÍÇüÀ̶ó¸é * ¿¬»êÀÚÀÇ °á°ú´Â Áº¯°ªÀÌ µÈ´Ù. ´Ù½Ã ¸» Çؼ­ ¸¸¾à ¼ö½ÄÀÇ µ¥ÀÌÅÍÇüÀÌ "T¸¦ °¡¸®Å°´Â Æ÷ÀÎÅÍ"¶ó¸é °á°úÀÇ µ¥ÀÌÅÍÇü Àº TÀÌ´Ù. The unary * operator denotes indirection, and returns the object or function to which its operand pointes. It is an lvalue if the oper and is a pointer to an object of arithmetic, struct, union, or pointe r type. If the type of the expression is "pointer to T", the type of the result is T. --------------------------------------------------------------------- <¿¹Á¦ 3> ´ÜÇ× * ¿¬»êÀÚÀÇ ÀÇ¹Ì --------------------------------------------------------------------- void main(void) { int i = 1, j = 0, y[2][2] = {100, 200, 300, 400}; printf("%d %d %d\n", *(*(y + i) + j), (*(y + i))[j], *(y[i] + j )); printf("%d %d %d\n", y[i][j], i[y][j], j[i[y]]); printf("%d %d %d\n", y[1][0], 1[y][0], 0[1[y]]); } | | ¹è¿­ ÂüÁ¶¿¡ °üÇÑ Á¤ÀÇ¿¡ +-------+ µû¸£¸é Àû¹ýÇÑ ¼ö½ÄÀÓ --------------------------------------------------------------------- ½ÇÇà °á°ú 300 300 300 300 300 300 300 300 300 300 300 300 --------------------------------------------------------------------- ¹è¿­ y¿¡¼­ ¿¬»ê¼øÀ§¸¦ ¸í½ÃÇϱâ À§ÇØ ¹è¿­¿ä¼Ò¸¦ ³ªÅ¸³»´Â y[i][j]¶ó ´Â ¼ö½Ä¿¡ °ýÈ£¸¦ »ç¿ëÇϸé ((y)[i])[j]¿Í °°¾ÆÁø´Ù. ±×¸®°í ³ª¼­ Áö³­ 10 ¿ùÈ£ÀÇ ¹è¿­ ÂüÁ¶¿¡ °üÇÑ Á¤ÀÇ¿¡ µû¶ó ÷ÀÚ ¼ö½ÄÀ» Æ÷ÀÎÅÍ ¼ö½ÄÀ¸·Î º¯È¯ Çϸé *(*(y + i) + j)°¡ µÈ´Ù. ¿©±â¼­ ÁÖ¸ñÇÒ °ÍÀº ¼ö½Ä *(*(y + i) + j) ¿¡¼­ °¢°¢ÀÇ ´ÜÇ× * ¿¬»ê °á°ú°¡ ¼­·Î ´Ù¸£´Ù´Â Á¡ÀÌ´Ù. ÀÌ ¼ö½ÄÀ» ¿ÏÀüÈ÷ ºÐÇØÇÏ¿© ¼³¸íÇÏ¸é ´ÙÀ½¿Í °°´Ù. ±×·±µ¥ Æ÷ÀÎÅÍ »ý¼º¿¡ °üÇÑ Á¤ÀÇ I°ú ´Ü Ç× * ¿¬»êÀÚÀÇ ¿ÏÀüÇÑ Á¤ÀǸ¦ ÀÌ¹Ì ¹àÇûÀ¸¹Ç·Î ±×¸²À» ÅëÇÑ Ä£ÀýÇÑ Çؼ³Àº »ý·«ÇÏ°Ú´Ù. --------------------------------------------------------------------- [1] y + i y + i´Â ¸ð¹è¿­ yÀÇ i¹ø° ºÎºÐ¹è¿­ÀÇ À§Ä¡¸¦ °¡¸®Å°´Â Æ÷ÀÎÅÍ ¼ö½ÄÀÌ ´Ù. Æ÷ÀÎÅÍ ¼ö½ÄÀ̹ǷΠ¿ì¸®°¡ »ç¿ëÇÏ´Â ¼ÒÇü ¸Þ¸ð¸® ¸ðµ¨¿¡¼­ sizeof(y + i)ÀÇ °á°ú´Â 2ÀÌ´Ù. [2] *(y + i) ´ÜÇ× * ¿¬»êÀÚ´Â y + i°¡ °¡¸®Å°´Â ´ë»óüÀÎ i¹ø° ºÎºÐ¹è¿­ Àüü¸¦ ±¸ÇÑ´Ù. µû¶ó¼­ ¼ö½Ä sizeof(*(y + i))´Â ½ÇÁ¦ ºÎºÐ¹è¿­ÀÇ Àüü ¹ÙÀÌÆ® Å© ±âÀÎ 2 * sizeof(int) == 4ÀÇ °ªÀ» °¡Áø´Ù. ÇÑÆí y + i°¡ °¡¸®Å°´Â ´ë»óü°¡ ¹è¿­À̹ǷΠ*(y + i)´Â ¹è¿­ÇüÀÌ µÈ ´Ù. ±×·±µ¥ ´ëºÎºÐÀÇ °æ¿ì Æ÷ÀÎÅÍ »ý¼º¿¡ °üÇÑ Á¤ÀÇ I¿¡ µû¶ó ¿ø·¡´Â ¹è¿­ ÇüÀÎ*(y + i)ÀÇ µ¥ÀÌÅÍÇüÀÌ yÀÇ i¹ø° ºÎºÐ¹è¿­ÀÇ 0¹ø° ¹è¿­¿ä¼Ò¸¦ °¡¸® Å°´Â Æ÷ÀÎÅÍ·Î ÀÚµ¿ º¯È¯µÈ´Ù. ½±°Ô ¸»Çؼ­ ´ëºÎºÐÀÇ °æ¿ì¿¡ *(y + i)´Â ¹è¿­¿ä¼Ò y[i][0]¸¦ °¡¸®Å°´Â Æ÷ÀÎÅͶó´Â ¶æÀÌ´Ù. À̶§ "´ëºÎºÐÀÇ °æ¿ì"¶ó °í Á¦ÇÑÀ» µÎ´Â ÀÌÀ¯´Â Æ÷ÀÎÅÍ »ý¼º¿¡ °üÇÑ Á¤ÀÇ II°¡ Àֱ⠶§¹®ÀÌ´Ù. ¿ì¸®´Â ¹è¿­ ÂüÁ¶¿¡ °üÇÑ Á¤ÀÇ¿¡ µû¶ó *(y + i)°¡ y[i]¿Í ¿ÏÀüÈ÷ µ¿ÀÏ ÇÏ´Ù´Â »ç½ÇÀ» ¾Ë°í ÀÖ´Ù. ±×·±µ¥ Àá½Ã Àü¿¡ y[i]´Â ºÎºÐ¹è¿­¸íÀ̶ó°í ¾ð ±ÞÇß´Ù. µû¶ó¼­ ÀÌ µÎ °¡Áö »ç½ÇÀ» ¼­·Î ¿¬°üÁöÀ¸¸é "¹è¿­¸íÀº ±× ¹è¿­ÀÇ 0¹ø° ¿ä¼Ò¸¦ °¡¸®Å°´Â Æ÷ÀÎÅÍÀÌ´Ù"¶ó´Â °á·ÐÀ» ¾î·ÆÁö ¾Ê°Ô À¯µµÇÒ ¼ö ÀÖ ´Ù. ´Ü, sizeof, ++, -- °°Àº ¿¬»êÀÚÀÇ ÇÇ¿¬»êÀڷμ­ÀÇ *(y + i)´Â Æ÷ÀÎÅÍ »ý¼º¿¡ °üÇÑ Á¤ÀÇ II¿¡ ÀÇÇØ Æ÷ÀÎÅÍ·Î ÀÚµ¿ º¯È¯ÀÌ µÇÁö ¾Ê´Â´Ù´Â °ÍÀ» ÀÌ ¹Ì ¼³¸íÇÑ ¹Ù ÀÖ´Ù. [3] *(y + i) + j ÀÌ ¼ö½ÄÀº y[i] + j¿Í Á¤ÀÇ¿¡ ÀÇÇØ ¿ÏÀüÈ÷ µ¿ÀÏÇϸç, i¹ø° ºÎºÐ¹è¿­ ÀÇ j¹ø° ¹è¿­¿ä¼Ò¸¦ °¡¸®Å°´Â Æ÷ÀÎÅÍ ¼ö½ÄÀÌ´Ù. °£´ÜÈ÷ ¸»Çؼ­ ¹è¿­¿ä¼Ò y[i][j]¸¦ °¡¸®Å°´Â Æ÷ÀÎÅÍ ¼ö½Ä &y[i][j]¿Í µ¿µîÇÏ´Ù´Â ¶æÀÌ´Ù. Æ÷ÀÎÅÍ ¼ö½ÄÀ̹ǷΠ¿ª½Ã sizeof ¿¬»êÀÇ °á°ú´Â 2ÀÌ´Ù. [4] *(*(y + i) + j) y[i][j]¸¦ °¡¸®Å°´Â Æ÷ÀÎÅÍ¿¡ ´ÜÇ× * ¿¬»êÀÚ¸¦ »ç¿ëÇßÀ¸¹Ç·Î °á°ú´Â i ntÇü ¹è¿­¿ä¼Ò y[i][j] ÀÚü°¡ µÈ´Ù. ½ÇÁ¦·Î ¹è¿­ ÂüÁ¶¿¡ °üÇÑ Á¤ÀÇ¿¡ µû ¶ó¼­ y[i][j]¿Í ¿ÏÀüÈ÷ µ¿ÀÏÇÏ´Ù. sizeof ¿¬»ê½ÄÀÇ °á°ú´Â intÇüÀÇ ¹ÙÀÌÆ® Å©±âÀÎ 2°¡ µÈ´Ù. --------------------------------------------------------------------- À̻󿡼­ Æ÷ÀÎÅÍ ¼ö½Ä *(*(y + i) + j)¸¦ ¿ÏÀü ÇغÎÇß´Ù. ±×·¯¸é ÁøÂ¥ ±×·±°¡ ¾Ë¾Æº¸±â À§ÇÏ¿© ´ÙÀ½ÀÇ <¿¹Á¦ 4>¸¦ Á÷Á¢ ½ÇÇàÇغ¸±â ¹Ù¶õ´Ù. <¿¹ Á¦ 4>¿¡¼­ ÇÑ °¡Áö ¤°í ³Ñ¾î°¡¾ß ÇÒ »çÇ×Àº ¼ö½Ä *(y + i)¿Í *(y + i) + 0ÀÇ Â÷ÀÌÁ¡ÀÌ´Ù. µµ´ëü ¹«½¼ Â÷ÀÌ°¡ ÀÖ´À³Ä°í? ½ÇÇàÇØ º¸¸é ¾Ë°Ô µÈ´Ù. ÀÌ Â÷ÀÌÁ¡À» ¾Ë¾Æ³¾ ¼ö¸¸ ÀÖ´Ù¸é Æ÷ÀÎÅÍ »ý¼º¿¡ °üÇÑ Á¤ÀÇ I, II¸¦ ¿ÏÀüÈ÷ Á¤º¹Çß´Ù°í ºÁµµ Ʋ¸²ÀÌ ¾øÀ¸¹Ç·Î ÇÑ ¹ø °õ°õÈ÷ »ý°¢ÇØ º¸±â ¹Ù¶õ´Ù. Èù Æ®: sizeof, ++ µîµîÀÇ ¿¬»ê½Ä¿¡¼­¸¸ Â÷ÀÌ°¡ ³­´Ù. <¿¹Á¦ 4> ¼ö½Ä *(*(y + i) + j)ÀÇ »ç¿ë ¿¹ --------------------------------------------------------------------- #define printpointer(expr) printf("%30s == %p\n", #expr, expr) #define printsize(expr) printf("%30s == %d\n", #expr, expr) void main(void) { int i, j, y[3][2]; i = j = 1; y[i][j] = 100; printpointer(y + i); printsize(sizeof(y + i)); printpointer(*(y + i)); printsize(sizeof(*(y + i))); printsize(sizeof(y[i])); printpointer(*(y + i) + 0); printsize(sizeof(*(y + i) + 0)); printpointer(*(y + i) + j); printsize(sizeof(*(y + i) + j)); printsize(*(*(y + i) + j)); printsize(sizeof(*(*(y + i) + j))); printsize(sizeof(y[i][j])); } --------------------------------------------------------------------- ½ÇÇà °á°ú(Åͺ¸ C 2.0¿¡¼­ ½ÇÇà) °¢ ¹øÁöÀÇ »ó´ëÀûÀÎ °ª¿¡¸¸ ÁÖ¸ñÇϵµ·Ï ÇÑ´Ù. Àý´ëÀûÀÎ °ªÀº ÀüÇô Àǹ̰¡ ¾ø´Ù. y + i == FFCE sizeof(y + i) == 2 *(y + i) == FFCE sizeof(*(y + i)) == 4 --+ sizeof(y[i]) == 4 +----- ¼­·Î °á°ú°¡ ´Ù¸£´Ù. *(y + i) + 0 == FFCE | sizeof(*(y + i) + 0) == 2 --+ *(y + i) + j == FFD0 sizeof(*(y + i) + j) == 2 *(*(y + i) + j) == 100 sizeof(*(*(y + i) + j)) == 2 sizeof(y[i][j]) == 2 --------------------------------------------------------------------- À̻󿡼­ ´ÙÂ÷¿ø ¹è¿­ Æ÷ÀÎÅ͸¦ ¹è¿ì±â À§ÇÑ ±âÃʸ¦ ´Ú¾Ò´Ù. Áö±Ý ÇÑ Âü ¸Ó¸®°¡ Âî²ö°Å¸±Å×´Ï ÀÌÂë¿¡¼­ Ã¥À» ³õ°í ³»ÀÏÀ» ±â¾àÇϱ⠹ٶõ´Ù.  #35 ÀÓÀ롂 (turbo28 ) [°­ÁÂ] CÆ÷ÀÎÅÍ3-5: ´ÙÂ÷¿ø ¹è¿­ Æ÷ÀÎÅÍ 03/06 01:02 257 line --------------------------------------------------------------------- 4 ´ÙÂ÷¿ø ¹è¿­ Æ÷ÀÎÅÍ --------------------------------------------------------------------- 4.1 ´ÙÂ÷¿ø ¹è¿­ Æ÷ÀÎÅÍÀÇ ÀÇ¹Ì¿Í ¿ëµµ "¹è¿­ Æ÷ÀÎÅÍ(array pointer)"¶ó´Â ¸»Àº "¹è¿­À» °¡¸®Å°´Â Æ÷ÀÎÅÍ(poi nter to array)"¶ó´Â ¶æÀÌ´Ù. ¸¶Âù°¡Áö·Î "´ÙÂ÷¿ø ¹è¿­ Æ÷ÀÎÅÍ"¶ó´Â ¸»Àº "´ÙÂ÷¿ø ¹è¿­À» °¡¸®Å°´Â Æ÷ÀÎÅÍ(pointer to multi-dimensional array)"¶ó ´Â ¶æÀÌ´Ù. ÀÏÂ÷¿ø ¹è¿­ Æ÷ÀÎÅÍ´Â Áö³­ 10¿ùÈ£¿¡¼­ ÃæºÐÈ÷ ´Ù·ç¾î º¸¾Ò´2Ù. ¿©±â¼­ ´Â ´ÙÂ÷¿ø ¹è¿­ Æ÷ÀÎÅ͸¦ ´Ù·ç´Â ¹æ¹ý¿¡ ´ëÇÏ¿© ¾Ë¾Æº¸°Ú´Ù. ÀÌ¿¡ ¾Õ¼­ ´Ù Â÷¿ø ¹è¿­ Æ÷ÀÎÅ͸¦ »ç¿ëÇÏ´Â ÀÌÀ¯¸¦ 4°¡Áö Á¤µµ¸¸ µé¾îº¸ÀÚ. ´ÙÀ½ÀÇ 4°¡ Áö ÀÌÀ¯ Áß¿¡¼­ [3]¹øÀÌ °¡Àå À¯·ÂÇÑ ÀÌÀ¯ÀÌ´Ù. +---- ´ÙÂ÷¿ø ¹è¿­À» Æ÷ÀÎÅÍ·Î ´Ù·ç´Â ÀÌÀ¯ 4°¡Áö --------+ | | | [1] ++, -- µîÀÇ ¿¬»êÀÚ¸¦ »ç¿ëÇϱâ À§ÇØ | | [2] ¿¬»ê ¼Óµµ°¡ ºü¸£¸ç ±â°è¾î Äڵ尡 °£°áÇϱ⠶§¹®¿¡ | | [3] ¸Å°³º¯¼ö°¡ ´ÙÂ÷¿ø ¹è¿­ÀÎ ÇÔ¼ö¸¦ ÀÛ¼ºÇÏ2±â À§ÇØ | | [4] ´ÙÂ÷¿ø ¹è¿­À» ÀÏÂ÷¿ø ¹è¿­·Î ´Ù·ç±â À§ÇØ | +------------------------------------------------------+ ÀÌ Áß¿¡¼­ [3]¹ø, [4]¹ø Ç׸ñÀº Áö¸éÀÌ ¸ðÀÚ¶ó´Â °ü°è·Î ´ÙÀ½ 12¿ù·Î ¼³¸íÀ» ¹Ì·ç±â·Î ÇÑ´Ù. 4.2 ÀÌÂ÷¿ø ¹è¿­ Æ÷ÀÎÅÍ py¸¦ Á¤ÀÇÇÏ´Â ¹æ¹ý°ú ÁÖÀÇÇÒ Á¡ ¿ì¼± ÀÌÂ÷¿ø ¹è¿­ Æ÷ÀÎÅÍ(pointer to two-dimensional array)´Â ¾Æ·¡ ¿Í °°ÀÌ Á¤ÀÇÇÑ´Ù. À̶§ ¹è¿­¿ä¼ÒÇüÀº ±â¾ïºÎ·ùÁöÁ¤ÀÚ¸¦ Æ÷ÇÔÇÒ ¼ö ÀÖÀ¸ ¸ç, ¿­ÀÇ °¹¼ö´Â ¹Ýµå½Ã »ó¼ö ¼ö½ÄÀ̾î¾ß ÇÑ´Ù. ±×¸®°í °ýÈ£(2 )¸¦ »ý·«ÇÏ ¸é ±¸µÎÁ¡ [ ]¿Í *ÀÇ ¿ì¼±¼øÀ§·Î ÀÎÇØ ÀüÇô ¾û¶×ÇÑ Æ÷ÀÎÅÍ ¹è¿­(12¿ùÈ£¿¡ ¼³¸íÇÒ ¿¹Á¤)À» Á¤ÀÇÇÏ°Ô µÇ¹Ç·Î ÁÖÀÇÇÏ¿©¾ß ÇÑ´Ù. +------------------------------------+ | ¹è¿­¿ä¼ÒÇü (*Æ÷ÀÎÅ͸í)[¿­ÀÇ °¹¼ö]; | +------------------------------------+ °¡·É intÇü ÀÌÂ÷¿ø ¹è¿­ y¸¦ Æ÷ÀÎÅÍ·Î ´Ù·ç±â À§ÇÏ¿© y¸¦ °¡¸®Å°´Â Æ÷ ÀÎÅÍ py¸¦ Á¤ÀÇÇÏ°íÀÚ ÇÑ´Ù¸é ¾Æ·¡¿Í °°ÀÌ ÇÑ´Ù. ¸¸¾à py°¡ ÇÔ¼öÀÇ Çü½Ä¸Å °³º¯¼ö¶ó¸é °¡´ÉÇÑ ¹æ¹ýÀÌ ÇÑ °¡Áö ´õ ÀÖ±â´Â ÇÏÁö¸¸ À̹ø¿¡´Â ¾ð±ÞÇÏÁö ¾Ê´Â´Ù. 2 int (*py)[2]; À§¿Í °°ÀÌ Çϸé y¸¦ °¡¸®Å³ ¼ö ÀÖ´Â ÀÌÂ÷¿ø ¹è¿­ Æ÷ÀÎÅÍ py°¡ Á¤ÀÇµÈ ´Ù. À̶§ ¿­ÀÇ °¹¼ö 2¸¦ »ý·«ÇÒ ¼ö´Â ¾ø´Ù. ¿­ÀÇ °¹¼ö¸¦ »ý·«ÇØ ¹ö¸®¸é ÇÑ ÇàÀÌ °ú¿¬ ¸î ¿­·Î ±¸¼ºµÇ¾î ÀÖ´ÂÁö ÄÄÆÄÀÏ·¯°¡ ¾Ë ¹æµµ°¡ ÀüÇô ¾øÀ¸¹Ç·Î Æ÷ÀÎÅÍ·Î ÀÌÂ÷¿ø ¹è¿­À» Á¶ÀÛÇÒ ¼ö°¡ ¾ø°Ô µÈ´Ù. ±×·¯³ª ÀÌ°ÍÀº ºÎÂ÷ÀûÀÎ ÀÌÀ¯ÀÌ°í ¿­ÀÇ °¹¼ö¸¦ »ý·«ÇÒ ¼ö ¾ø´Â ±Ùº» ÀÌÀ¯´Â ¾Æ·¡¿Í °°´Ù. --------------------------------------------------------------------- Æ÷ÀÎÅÍ º¯¼ö py¸¦ Á¤ÀÇÇÒ ¶§ py°¡ °¡¸®Å°´Â ´ë»óüÀÇ 2Å©±â¸¦ ¾î¶°ÇÑ ¹æ ¹ýÀ¸·Îµç ¹Ýµå½Ã ¸í½ÃÇØÁÖ¾î¾ß ÇÑ´Ù. --------------------------------------------------------------------- Æ÷ÀÎÅÍ º¯¼ö¸¦ ¼±¾ð(!= Á¤ÀÇ)ÇÒ ¶§¿¡µµ ÀÌ¿Í ¸¶Âù°¡ÁöÀÌ´Ù. ¸¸¾à ´ë»ó üÀÇ Å©±â¸¦ ¾Ë·ÁÁÖÁö ¾ÊÀ¸¸é Æ÷ÀÎÅÍ¿¡ ´ÜÇ× * ¿¬»êÀÚ¸¦ ½á¼­ ±× ´ë»óü¸¦ ÂüÁ¶ÇÒ ¶§ ¹®Á¦°¡ ¹ß»ýÇÑ´Ù. ¿¹¸¦ µé¾î *py¶ó´Â ¼ö½ÄÀÌ ÀÖÀ» ¶§ ´ÜÇ× * ¿¬ »êÀÚ¿¡ ÀÇÇØ py°¡ ÇöÀç °¡¸®Å°°í ÀÖ´Â ¹øÁö¿¡¼­ °ú¿¬ ¸î ¹ÙÀÌÆ®¸¸Å­À» ÀÐ ¾î³»¾ß ÇÏ´ÂÁö ÄÄÆÄÀÏ·¯°¡ ¾Ë ¹æµµ°¡ ¾ø´Ù. ÇÑÆí py°¡ °¡¸®Å°´Â °ÍÀº ÀÌÂ÷¿ø ¹è¿­ y2ÀÌ´Ù. ±×·±µ¥ pyÀÇ ´ë»óü°¡ y Àüü¶ó°í Âø°¢Çϸé ÀÌ°Ç Á¤¸»·Î °ï¶õÇÏ´Ù. py°¡ °¡¸®Å°´Â °ÍÀº ¹è¿­ yÀÌÁö ¸¸ pyÀÇ ´ë»óü´Â ¹è¿­ y Àüü°¡ ¾Æ´Ï¶ó *pyÀÌ´Ù. À̶§ *py´Â py°¡ °¡¸®Å° ´Â ¹øÁö¿¡¼­ºÎÅÍ Àо¾ß ÇÒ ¸Þ¸ð¸®»óÀÇ ¿µ¿ªÀ̹ǷΠyÀÇ ºÎºÐ¹è¿­ ÁßÀÇ Çϳª°¡ µÈ´Ù. µû¶ó¼­ pyÀÇ ´ë»óü´Â ¹è¿­ y Àüü°¡ ¾Æ´Ï¶ó yÀÇ ºÎºÐ¹è¿­ ÁßÀÇ Çϳª, ¿¹ÄÁ´ë y[0]°°Àº °ÍÀÓÀ» ¾Ë ¼ö ÀÖ´Ù. int x[3], *px; px = x; ¡ç px¸¦ ÃʱâÈ­ÇÑ´Ù. Áö±Ý ÇÑÂü Çò°¥¸®°í ÀÖ´Â »ç¶÷À» À§ÇØ À§ÀÇ ÀÏÂ÷¿ø ¹è¿­ Æ÷ÀÎÅÍ px¸¦ ¿¹·2Î µé¾îº¸ÀÚ. px´Â ÀÏÂ÷¿ø ¹è¿­ x¸¦ °¡¸®Å²´Ù°í ¸»Àº ÇÏÁö¸¸ ½ÇÁ¦·Î px ÀÇ ´ë»óü´Â x Àüü°¡ ¾Æ´Ï¶ó xÀÇ ¹è¿­¿ä¼ÒÀÓÀ» ÀÍÈ÷ ¾Ë°í ÀÖÀ» ÁÙ·Î ¹Ï´Â ´Ù. µû¶ó¼­ ´ë»óü¸¦ ÂüÁ¶ÇÏ´Â *px¶ó´Â ¼ö½ÄÀº x Àüü¸¦ ÀоÁö ¾Ê°í x ÀÇ ¹è¿­¿ä¼Ò, ¿¹ÄÁµ¥ x[0]¸¦ Àо°Ô µÈ´Ù. ´Ù½Ã º»·ÐÀ¸·Î µÇµ¹¾Æ°¡¼­ pyÀÇ ´ë»óü(Áï *py)´Â yÀÇ ºÎºÐ¹è¿­(1Â÷ ¿ø)À̹ǷΠ´ë»óüÀÇ Å©±â¸¦ ¸í½ÃÇÑ´Ù´Â °ÍÀº °ð ±× ºÎºÐ¹è¿­ÀÇ Å©±â(yÀÇ Á¦2÷ÀÚÅ©±â)¸¦ ¸í½ÃÇÏ´Â °ÍÀ» ÀǹÌÇÑ´Ù. µû¶ó¼­ pyÀÇ ¿­ÀÇ °¹¼ö 2´Â Àý´ë ·Î »ý·«ÇÒ ¼ö ¾ø´Ù. ÀÌ·¯ÇÑ2 ÀÌÀ¯ ¶§¹®¿¡ Æ÷ÀÎÅÍ py¸¦ Á¤ÀÇÇÒ ¶§ ¿­ÀÇ °¹¼ö¸¦ »ý·«ÇØ ¹ö¸® ¸é ÄÄÆÄÀÏ·¯°¡ "Size of structure or array not known"À̶ó´Â ¿¡·¯¸¦ ³» ¹Ç·Î Ç×»ó ÁÖÀÇÇϱ⠹ٶõ´Ù. [±×¸² 7] py¸¦ Á¤ÀÇÇÑ Á÷ÈÄÀÇ ¸Þ¸ð¸® »óÅ --------------------------------------------------------------------- +--------- ¾ÆÁ÷ ¾Æ¹«°Íµµ °¡¸®Å°Áö ¾Ê°í ÀÖ´Ù. | | Æ÷ÀÎÅÍ py ¹è¿­ y +-------+ +-------+-------+-------+-------+-------+-------+ | | | | | | | |2 | +-------+ +-------+-------+-------+-------+-------+-------+ | [0][0] [0][1] [1][0] [1][1] [2][0] [2][1] | | +--------- ¾ÆÁ÷ ÃʱâÈ­¸¦ ÇÏÁö ¾Ê¾ÒÀ¸¹Ç·Î ÀÚµ¿ º¯¼öÀÏ °æ¿ì¿¡´Â ¾²·¹±â(garbage)°¡ ±×´ë·Î ÀÜÁ¸ÇÑ´Ù. --------------------------------------------------------------------- 4.3 Æ÷ÀÎÅÍ pyÀÇ ÃʱâÈ­ ¹æ¹ý°ú ÁÖÀÇÇÒ Á¡ ¾Õ¿¡¼­´Â py¸¦ Á¤ÀÇÇÏ´Â ¹æ¹ý¸¸ ¼³¸íÇß´Ù. ±×·¸°Ô Á¤ÀÇµÈ py¸¦ ½ÇÁ¦·Î »ç¿ëÇÏ·Á¸é ¸ÕÀú py¸¦ Ãʱ2âÈ­ÇÏ´Â ÀÛ¾÷ÀÌ ÇÊ¿äÇÏ´Ù. ¿©±â¼­ ¸»ÇÏ´Â ÃʱâÈ­ ¶ó´Â ¸»Àº ¼±¾ð¹®¿¡¼­ÀÇ ÃʱâÈ­°¡ ¾Æ´Ï¶ó ±â¾ïÀå¼Ò ³»¿¡ ÀÜÁ¸ÇÏ´Â ¾²·¹±â (garbage)°ªÀ» Ä¡¿ì´Â ÀÛ¾÷À» ÀǹÌÇÑ´Ù. py¸¦ ÃʱâÈ­ÇÏ´Â ¹æ¹ýÀº ¾Æ·¡¿Í °°ÀÌ ¹è¿­¸í y¸¦ py¿¡ Á÷Á¢ ´ëÀÔÇÏ´Â °ÍÀÌ´Ù. py = y; À§ÀÇ ´ëÀÔ½ÄÀÌ Àû¹ý(valid)ÇÑ ÀÌÀ¯´Â ÀÌ·¸´Ù. ¸ÕÀú ¹è¿­¸í y´Â Æ÷ÀÎÅÍ »ý¼º¿¡ °üÇÑ Á¤ÀÇ I¿¡ ÀÇÇØ "Å©±â°¡ 2ÀÎ 1Â÷¿ø ºÎºÐ¹è¿­ y[0]"¸¦ °¡¸®Å°´Â Æ÷ÀÎÅÍ·Î ÀÚµ¿ º¯È¯µÈ´Ù. ¿©±â¼­ y´Â ´ëÀÔ ¿¬»êÀÚ =ÀÇ Áº¯ÀÌ ¾Æ´Ï¶ó ¿ìº¯ ¿¡ À§Ä¡ÇÏ°í ÀÖÀ¸¹Ç·Î Æ÷ÀÎÅÍ »ý¼2º¿¡ °üÇÑ Á¤ÀÇ II¿¡ ÀüÇô ÀúÃ˵ÊÀÌ ¾øÀÌ y´Â Æ÷ÀÎÅÍ·Î ÀÚµ¿ º¯È¯µÈ´Ù. ±×·¯³ª ¾Æ·¡ÀÇ ¹®±¸¸¦ À¯³äÇØ¾ß ÇÑ´Ù. --------------------------------------------------------------------- ´ëÀԽĿ¡¼­ ¿øÄ¡ ¾Ê´Â ÀÚµ¿ º¯È¯ÀÌ ¹ß»ýÇÏÁö ¾Êµµ·Ï ÇÏ·Á¸é = ¾çº¯ÀÇ µ¥ ÀÌÅÍÇüÀÌ Ç×»ó ÀÏÄ¡ÇØ¾ß ÇÑ´Ù. µû¶ó¼­ ¾î¶² Æ÷ÀÎÅÍ º¯¼ö pa¿¡ ¾î¶² Æ÷ÀÎ ÅÍ ¼ö½ÄÀ» ´ëÀÔÇÏ°íÀÚ ÇÑ´Ù¸é, ´ëÀÔÇÏ·Á´Â ¿ìº¯ ¼ö½ÄÀÇ µ¥ÀÌÅÍÇü°ú Áº¯ ÀÇ Æ÷ÀÎÅÍ º¯¼ö paÀÇ µ¥ÀÌÅÍÇüÀÌ ¼­·Î ¿ÏÀüÈ÷ ÀÏÄ¡ÇØ¾ß ÇÑ´Ù. ------------------------------------------------2--------------------- ´Ù½Ã ¸»Çؼ­ Áº¯ Æ÷ÀÎÅÍ paÀÇ ´ë»óü¿Í ¿ìº¯ Æ÷ÀÎÅÍ ¼ö½ÄÀÇ ´ë»óü°¡ ¿ÏÀüÈ÷ µ¿ÀÏÇÑ µ¥ÀÌÅÍÇüÀ̾î¾ß ÇÑ´Ù´Â ¶æÀÌ´Ù. ÀÌ¿Í °°Àº ÁÖÀÇ »çÇ×À» À§ ¹ÝÇÏ¸é ½É°¢ÇÑ ³í¸® ¿¡·¯°¡ ¹ß»ýµÉÁöµµ ¸ð¸¥´Ù´Â »çÀü °æ°í·Î¼­ ÄÄÆÄÀÏÇÒ ¶§ "Suspicious pointer conversion"À̶ó´Â °æ°í ¸Þ½ÃÁö¸¦ ¹Þ°Ô µÈ´Ù. ¾Æ ¸¶µµ Æ÷ÀÎÅ͸¦ ÁÖÀDZí°Ô »ç¿ëÇÏÁö ¾Ê´Â µ¶ÀÚ´Â ¹ºÁöµµ ¸ð¸£°í ½É½ÉÄ¡ ¾Ê°Ô ÀÌ·± °æ°í¸¦ ÀÚÁÖ ¹Þ¾ÒÀ» °ÍÀÌ´Ù. ¸¸¾à¿¡ Áº¯ÀÇ Æ÷ÀÎÅÍ paÀÇ ´ë»óü°¡ ¾î¶² ºÎºÐ¹è¿­À̶ó¸é, paÀÇ ´ë»ó üÀÎ±× ºÎº2й迭ÀÇ Â÷¿ø ¹× °¢ ÷ÀÚÅ©±â°¡ ¿ìº¯ÀÇ Æ÷ÀÎÅÍ ¼ö½ÄÀÇ ±×°Í°ú ¼­·Î ¿ÏÀüÈ÷ ÀÏÄ¡Çؾ߸¸ ÇÑ´Ù. ÀÌÁ¦ ´Ù½Ã º»·ÐÀ¸·Î µ¹¾Æ¿Í¼­, pyÀÇ ´ë»óü(== *py)´Â ±× ÀÚ½ÅÀÇ Á¤ÀÇ ¿¡ µû¶ó Å©±â°¡ 2ÀÎ 1Â÷¿ø ¹è¿­ÀÌ´Ù. Æ÷ÀÎÅÍ·Î º¯È¯µÈ y°¡ °¡¸®Å°´Â ´ë»ó ü(== *y) ¿ª½Ã Å©±â°¡ 2ÀÎ 1Â÷¿ø ¹è¿­ÀÌ´Ù. µû¶ó¼­ py = y´Â Àû¹ýÇÑ ¼ö½Ä ÀÌ µÈ´Ù. ¸¸¾à ¾Æ·¡¿Í °°ÀÌ ÀÏÂ÷¿ø ¹è¿­ Æ÷ÀÎÅÍÀÎ px¿¡ y¸¦ ´ëÀÔÇÏ·Á ½ÃµµÇÑ´Ù ¸é "Suspicious pointer conversion" °æ°í¸¦ Ʋ¸²¾øÀÌ ¹Þ°Ô µÈ´Ù. px = y; --+- °æ°í ¹ß»ý | py = x;2 --+ [±×¸² 8] py¸¦ ÃʱâÈ­ÇÑ Á÷ÈÄÀÇ ¸Þ¸ð¸® »óÅ °³³äµµ --------------------------------------------------------------------- Æ÷ÀÎÅÍ py ¹è¿­ y +-------+ +-------+-------+-------+-------+-------+-------+ | o --+-------->| | | | | | | +-------+ +-------+-------+-------+-------+-------+-------+ yÀÇ ¼±µÎ¹øÁö°ªÀ» [0][0] [0][1] [1][0] [1][1] [2][0] [2][1] °¡Áø´Ù. --------------------------------------------------2------------------- 4.4 Æ÷ÀÎÅÍ py¿¡ ÀÇÇÑ ¹è¿­ ÂüÁ¶ ÀÌÂ÷¿ø ¹è¿­ Æ÷ÀÎÅÍ py¸¦ ÀÏ´Ü Á¤ÀÇÇÏ°í ÃʱâÈ­ÇÑ ´ÙÀ½¿¡´Â py¸¦ ±×Àú y ¾²µíÀÌ ¸¶À½´ë·Î »ç¿ëÇÒ ¼ö ÀÖ´Ù. Áï py¸¦ °¡Áö°í ¹è¿­ y¸¦ ÀÚÀ¯ÀÚÀç·Î ÂüÁ¶ÇÒ ¼ö°¡ ÀÖ´Ù´Â ¸»ÀÌ´Ù. ¿¹¸¦ µé¾î py[1][1]Àº ¹è¿­¿ä¼Ò y[1][1]°ú ¿ÏÀüÈ÷ µ¿µî(equivalent)ÇÏ ´Ù. ´ÜÁö Â÷ÀÌÁ¡ÀÌ ÀÖ´Ù¸é py[1][1]Àº Æ÷ÀÎÅÍ º¯¼ö py¸¦ ÀÌ¿ëÇÑ ¹è¿­ ÂüÁ¶ ÀÌ°í, y[1][1]Àº Æ÷ÀÎÅÍ »ó¼ö y¿¡ ÀÇÇÑ ¹è¿­ ÂüÁ¶¶ó´Â °Í »ÓÀÌ´Ù. ¸¶Âù°¡Áö·Î py[1]µµ y[1]°ú µ¿µîÇÏ¸ç µÑ ´Ù yÀÇ 1¹ø° ºÎºÐ¹è2¿­À» ÀÇ ¹ÌÇÑ´Ù. ¶ÇÇÑ py[1]ÀÇ ¿ø·¡ µ¥ÀÌÅÍÇüÀº ¹è¿­ÇüÀÌ´Ù. ÇÏÁö¸¸ py[1]ÀÌ ¼ö½Ä ³»¿¡ ¾²Àδٸé y[1]°ú ¸¶Âù°¡Áö·Î ´ëºÎºÐÀÇ °æ¿ì¿¡ ±× µ¥ÀÌÅÍÇüÀÌ ºÎºÐ¹è ¿­ y[1]À» °¡¸®Å°´Â Æ÷ÀÎÅÍ·Î ÀÚµ¿ º¯È¯µÈ´Ù. [±×¸² 9] py¸¦ ÀÌ¿ëÇÏ¿© ¹è¿­ y¸¦ ÂüÁ¶ÇÒ ¶§ÀÇ »óȲ °³³äµµ --------------------------------------------------------------------- ¹è¿­ y +-------+-------+-------+-------+-------+-------+ | | | | | | | 2 +-------+-------+-------+-------+-------+-------+ y[0][0] y[0][1] y[1][0] y[1][1] y[2][0] y[2][1] | | | | | | Æ÷ÀÎÅÍ py | | | | | | +-------+ | | | | | | | o --+-----------+-------+-------+-------+-------+-------+ +-------+ py[0][0] py[0][1] py[1][0] py[1][12] py[2][0] py[2][1] py = y¿¡ ÀÇÇØ ÃʱâÈ­µÊ --------------------------------------------------------------------- Áö±Ý±îÁö ÀÌÂ÷¿ø ¹è¿­ Æ÷ÀÎÅÍ pyÀÇ ¸ðµç °Í¿¡ ´ëÇØ ¼³¸íÇߴµ¥ »ç½Ç ¸»ÀÌ Á¶±Ý ¾î·Á¿ï »ÓÀÌÁö ½ÇÁ¦·Î »ç¿ëÇغ¸¸é ¹è¿­ Æ÷ÀÎÅͶó´Â °Íµµ º° °Í ÀÌ ¾Æ´ÔÀ» ¾Ë ¼ö ÀÖ´Ù. <¿¹Á¦ 5>¸¦ ºÁµµ ±×·¸´Ù. ±¦È÷ ³ëÆĽɿ¡ ÁÖÀÇ »çÇ× À» ¹Øµµ ³¡µµ ¾øÀÌ ³ÊÀúºÐÇÏ°Ô ´Ã¾î ³ö¼­ ¾î·Æ°Ô º¸ÀÌ´Â °ÍÀÌÁö Æ÷ÀÎÅ͸¦ ¾²±â À§ÇÏ¿© ½ÇÁ¦·Î ÇØ¾ß ÇÒ ÀÏÀº Áö±ØÈ÷ ´Ü¼øÇÏ°í °£´ÜÇÏ´Ù. ¹è¿­ Æ÷ÀÎÅ͸¦ ¾²°íÀÚ ÇÒ ¶§2 ½ÇÁ¦·Î ÇØ¾ß ÇÒ ÀÏÀº °£´ÜÈ÷ 3´Ü°è·Î ¾Ð ÃàÇÒ ¼ö ÀÖ´Ù. ¹è¿­ Æ÷ÀÎÅ͸¦ ¾²±â À§ÇÑ 3´Ü°è ¹æ¹ýÀº º¸´Â »ç¶÷ÀÇ ½Ã°¢¿¡ µû¶ó ±× ¹æ¹ýÀ» ¾Æ´Â »ç¶÷¿¡°Ô´Â Áö±ØÈ÷ ´Ü¼øÇØ º¸ÀÏ °ÍÀÌ°í ±× ¹æ¹ýÀ» ¸ð ¸£´Â »ç¶÷¿¡°Ô´Â »ó»óÀ» ÃÊ¿ùÇÒ ¸¸Å­ ¾î·Æ°Ô º¸ÀÏ ¼öµµ ÀÖ´Â °ÍÀÌ´Ù. µ¶ÀÚ ´Â °ú¿¬ ÀüÀÚ¿Í ÈÄÀÚ Áß ¾î´À ÂÊ¿¡ ¼ÓÇÏ´ÂÁö ±Ã±ÝÇÏ´Ù. ÇÏ¿©°£¿¡ ±× 3´Ü°è ´Â "Á¤ÀÇ -> ÃʱâÈ­ -> ´ë»óü ÂüÁ¶"ÀÇ ¼ø¼­·Î ÀÌ·ç¾îÁø´Ù. [Ç¥ 1] ¹è¿­ Æ÷ÀÎÅÍÀÇ »ç¿ë¹ý 3´Ü°è ---------------------------------------- Æ÷ÀÎÅÍ »ç¿ëÀÇ 3´Ü°è -------------2--------------------------- Á¦1´Ü°è ¹è¿­ Æ÷ÀÎÅ͸¦ Á¤ÀÇÇÑ´Ù. Á¦2´Ü°è ¹è¿­ Æ÷ÀÎÅ͸¦ ÃʱâÈ­ÇÑ´Ù. Á¦3´Ü°è ¹è¿­ Æ÷ÀÎÅÍ·Î ¹è¿­À» ÂüÁ¶ÇÑ´Ù. ---------------------------------------- <¿¹Á¦ 5> ¹è¿­ Æ÷ÀÎÅÍ pyÀÇ »ç¿ë¿¹ --------------------------------------------------------------------- #define printexprp(expr) printf(#expr " == %p\n", expr) #define printexpri(expr) printf(#expr " == %d\n", expr) void main(void) { int y[][2] = {{100, 200}, {300, 400}, {500, 600}}; int (*py)[22]; py = y; printexprp(y[1]); printexprp(py[1]); printexpri(sizeof(y[0])); printexpri(sizeof(py[0])); printexpri(y[0][0]); printexpri(py[0][0]); printexpri(y[2][1]); printexpri(py[2][1]); } --------------------------------------------------------------------- ½ÇÇà °á°ú y[1] == FFDC py[1] == FFDC sizeof(y[0]) == 4 sizeof(py[0]) == 4 y[0][0] == 100 py[0][0] == 100 y[2][1] == 600 py[2][1] == 600 ---------------------------------------2------------------------------ À§ÀÇ <¿¹Á¦ 5>¿¡ Á¶±ÝÀÌ¶óµµ Àǹ®³ª´Â »çÇ×ÀÌ ÀÖÀ¸¸é "¹è¿­ ÂüÁ¶¿¡ °ü ÇÑ Á¤ÀÇ", "Æ÷ÀÎÅÍ »ý¼º¿¡ °üÇÑ Á¤ÀÇ I", "Æ÷ÀÎÅÍ »ý¼º¿¡ °üÇÑ Á¤ÀÇ II", "°£Á¢ÁöÁ¤ ¿¬»êÀÚ *ÀÇ Á¤ÀÇ" µî 4°¡Áö Á¤ÀǸ¦ ÀÚ¶ó°°ÀÌ ²öÁú±â°Ô ¹°°í ´Ã ¾îÁö¸é Á¶¸¸°£ ÀÌÇØ°¡ °¡¸®¶ó º»´Ù. ³¡À¸·Î Áö±Ý±îÁö ¿¹Á¦¿¡¼­ ¸ÅÅ©·Î ÇÔ¼ö¸¦ Á¤ÀÇÇϸ鼭 Àü󸮱⠿¬»êÀÚ #À» ¾Æ¹« ¾ð±Þ¾øÀÌ ½á¿Ô´Âµ¥, ÀÌ Æ¯¼öÇÑ ¿¬»êÀÚÀÇ ¾²ÀÓ»õ´Â ÀÌ ±Û ù¸Ó¸® ¿¡¼­ ¼Ò°³ÇÑ Á¤º¹ Åͺ¸ C¶ó´Â Ã¥ÀÇ 9.3.4Àý¿¡ ÀÚ¼¼ÇÏ°Ô ¼³¸íµÇ¾î ÀÖ´Ù. ±× 2 ¹Û¿¡ Åͺ¸ C User's Guide ¸Å´º¾ó ¿ø¼­ÀÇ 230ÂÊ(Åͺ¸ C 1.5) ¶Ç´Â 334ÂÊ (Åͺ¸ C 2.0)À» Âü°íÇصµ µÈ´Ù. ´ÙÀ½ ±Û·Î °è¼Ó À̾îÁý´Ï´Ù. turbo28 Åͺ¸ÀÌ»¡ ÀÓ ÀÎ °Ç #36 ÀÓÀ롂 (turbo28 ) [°­ÁÂ] CÆ÷ÀÎÅÍ3-6: ´ÙÂ÷¿ø ¹è¿­ Æ÷ÀÎÅÍ 03/06 01:03 154 line --------------------------------------------------------------------- 5 ´ÙÀ½¿¡´Â --------------------------------------------------------------------- Áö±Ý±îÁö »çÈê¿¡(³»Áö´Â ÇÑ ´Þ¿¡) °ÉÃÄ ½Ç¸Å°³º¯¼ö¸¦ º¯°æÇÏ´Â ÇÔ¼ö¸¦ ÀÛ¼ºÇÏ´Â ¹æ¹ý°ú ´ÙÂ÷¿ø ¹è¿­ Æ÷ÀÎÅÍ¿¡ °üÇØ ÀÍÇû´Ù. À̹ø ´ÞÀÇ ³»¿ë¿¡´Â »ý¼ÒÇÑ °³³äÀ» °¡Áö´Â ÀÌ·ÐÀûÀÎ °ÍµéÀÌ ¸¹¾Æ¼­ ÀÌÇØÇϴµ¥ ´Ù¼Ò ½Ã°£ÀÌ °É ¸®Áö ¾ÊÀ»±î ¿ì·ÁµÈ´Ù. ±×·¯³ª À̹ø ´ÞÀÇ ³»¿ëÀº ¹è¿­°ú Æ÷ÀÎÅÍÀÇ °ü°è¿¡ À־ °¡Àå Áß¿äÇÑ ÇÙ½É »çÇ×À̹ǷΠ¹è¿­À» Æ÷ÀÎÅÍ·Î2 ´Ù·ç°í ½ÍÀº »ç¶÷Àº ¾î¶»°Ô Çؼ­µçÁö ÀÌ ±ÛÀ» ¼ÒÈ­ÇØ ³»¾ß¸¸ ÇÒ °ÍÀÌ´Ù. ÀÌ ±ÛÀ» ¼ÒÈ­ÇØ ³»Áö ¸øÇÏ¸é ´ÙÀ½ ´ÞÀÇ ±Ûµµ ¿ª½Ã ÀÌÇØÇÏÁö ¸øÇÏ°Ô µÈ´Ù. ±×¸®°í Áö¸é °ü°è»ó ¹è¿­ÀÇ ÃʱâÈ­ ¹æ¹ýÀ̳ª ´ÜÇ× & ¿¬»êÀÚ¿¡ ´ëÇÑ º¸ ´Ù ÀÚ¼¼ÇÑ ¼³¸í µîµî, ´ÙÂ÷¿ø ¹è¿­¿¡ °ü°èµÈ ¸î °¡Áö »çÇ×À» ´Ù·çÁö ¸øÇÑ °ÍÀÌ ³»½É ¾Æ½¬¿ï µû¸§ÀÌ´Ù. ÀÌ »çÇ×µéÀº ÀÌ ±Û ù¸Ó¸®¿¡¼­ ¼Ò°³ÇÑ Á¤º¹ Åͺ¸ C¶ó´Â Ã¥ÀÇ 10Àå°ú 11Àå¿¡ »ó¼¼È÷ ¼³¸íµÇ¾î ÀÖÀ¸¹Ç·Î ±ÝÀüÀû, ½Ã°£Àû ¿©À¯°¡ ÀÖ´Â »ç¶÷Àº ±× Ã¥À» Âü°íÇϱ⠹ٶõ´Ù. ´ÙÀ½¿¡´Â ´ÙÂ÷¿ø ¹2è¿­ Æ÷ÀÎÅÍÀÇ ÀÀ¿ëÀ¸·Î¼­ ¸Å°³º¯¼ö°¡ ´ÙÂ÷¿ø ¹è¿­ÀÎ ÇÔ¼ö¸¦ ÀÛ¼ºÇÏ´Â ¹æ¹ý°ú (Áö¸é »çÁ¤ÀÌ Çã¶ôµÇ¸é) ´ÙÂ÷¿ø ¹è¿­À» ÀÏÂ÷¿ø ¹è ¿­·Î ´Ù·ç´Â ¹æ¹ýÀ» ¾Ë¾Æº» µÚ, °ðÀ̾î Æ÷ÀÎÅÍ ¹è¿­¿¡ °üÇØ ÁýÁßÀûÀ¸·Î ³í ÇÒ ¿¹Á¤ÀÌ´Ù. Æ÷ÀÎÅÍ ¹è¿­Àº C¿¡¼­ ¹®ÀÚ¿­ ¹è¿­À» ±¸ÇöÇϴµ¥ ÇʼöÀûÀÎ °Í À¸·Î¼­ C¿¡¼­ ¹®ÀÚ¿­ ¹è¿­À» Á¦´ë·Î ¸¸µé¾î ½áº¸Áö ¸øÇØ °ÆÁ¤Çß´ø µ¶ÀÚµé Àº ±â´ëÇصµ ÁÁÀ»¼º ½Í´Ù. --------------------------------------------------------------------- ºÎ·Ï ´ýÀ¸·Î --------------------------------------------2------------------------- ¿©Áö²¯ ÇØ¿Â °Í °°ÀÌ ÀÌ´Þ¿¡µµ ´ýÀ¸·Î ¿¹Á¦ Çϳª µ¹·Áº¸±â·Î ÇÑ´Ù. ÀÌ ¹ø ¿¹Á¦´Â º¼¸¸ÇÑ ±×·¡ÇÈ ¿¹Á¦°¡ ¾Æ´Ï°í µéÀ»¸¸ÇÑ »ç¿îµå ¿¹Á¦ÀÌ´Ù. ÀÌ ¿¹ Á¦´Â º¼·£µå¿¡¼­ Á¦°øÇÏ´Â ÆĽºÄ® µ¥¸ð ÇÁ·Î±×·¥ ÁßÀÇ ÇϳªÀÎ soundex.pas ¿¡¼­ ÀϺκÐÀ» ¹ßÃéÇÏ¿© C·Î ¹ø¿ªÇÑ ´ÙÀ½ Àû´çÈ÷ ¼Õ Á» º» °ÍÀÌ´Ù. ³»¿ë¿¡ ´Â ½Å°æ¾²Áö ¸»°í ±×Àú ½ÇÇà½ÃÄѺ¸´Â Àç¹Ì¿¡ ¸¸Á·Çϱ⠹ٶõ´Ù. ¿ì¼± ¿¹Á¦¸¦ woods.c¶ó´Â È­ÀϸíÀ¸·Î ÀԷºÎÅÍ ÇÑ´Ù. ´Ù ÀÔ·ÂÇÏ°í µð ½ºÅ©¿¡ ¼¼À̺êÇÑ µÚ Å°¸¦ ´­·¯ ÄÄÆÄÀϡݸµÅ©°¡ ¹«»çÈ2÷ ³¡³ª´Â°¡ È®ÀÎ ÇÏ°í Åͺ¸ C 1.5¿¡¼­´Â Å°, Åͺ¸ C 2.0¿¡¼­´Â Å°¸¦ ´­·¯ ¼­ ¿¹Á¦¸¦ ½ÇÇà½ÃŲ´Ù. ±×·¯¸é ¹º ¼Ò¸®°¡ ³¯ °ÍÀÌ´Ù. ±Í ±â¿ï¿© º¸½Ã¶ó. <´ý ¿¹Á¦> ½£¼Ó¿¡¼­... --------------------------------------------------------------------- /* File: WOODS.C - Sound example */ #include #include #include #include typedef unsigned char far *display_buffer; typedef unsigned char byte; typedef unsigned word; enum {BIRD1 = 1, BIRD2, B2IRD3, BIRD4}; void who_is_singing(int bird); void singing_bird(int bird, word duration, int pitch, int note); #define _calcaddr(x, y) \ (display_buffer)MK_FP(_displaybufferbase, \ 160 * ((y) - 1) + 2 * ((x) - 1)) #define _outch(addr, c, attr) \ (*(word far *)(addr) = (byte)(c) | (byte)(attr) << 8) word _displaybufferbase; void main(void) { int bird; struct text_info info; gettextinfo(&info); _displaybufferbase = (info.currmode =2= C80) ? 0xb800 : 0xb000; cprintf("Press any key to stop singing\r\n"); randomize(); do { bird = random(4) + 1; who_is_singing(bird); singing_bird(bird, random(2000) + 300, random(4000) + 200, random(2)); delay(random(500) + 50); } while (!kbhit()); getch(); /* clear key input buffer */ nosound(); putch('\r'); clreol(); } void who_is_singing(int bird) { static char *order[] = { ""2, "pretty", "small", "charming", "lovely" }; putch('\r'); clreol(); cprintf("A %s bird is now singing...", order[bird]); } void song(int note) { _outch(_calcaddr(wherex(), wherey()), (note == 0) ? '\x0e' : '\x0d', 0x0f); gotoxy(wherex() + 1, wherey()); } void singing_bird(int bird, word duration, int pitch, int note) { int i = 1, j, k; switch (bird) { case BIRD1: for (; i < duration; i++) { sound(pitch2 + i); if (i % 50 == 0) song(note); } break; case BIRD2: for (; i < duration; i++) { sound(pitch + i); if (i % 50 == 0) song(note); } nosound(); delay(100); for (j = i + i / 10; i > j; i--) { sound(pitch + i); if (i % 50 == 0) song(note); } break; 2 case BIRD3: for (k = 1; k < random(20) + 10; k++) { sound(pitch); delay(30); song(note); sound(pitch + pitch / 10); delay(30); } break; case BIRD4: k = pitch + pitch / 10; for (i = random(5) + 10; i > 1; i--) { for (j = pitch; j < k; j += 10) { sound(j); delay(6)2; } nosound(); song(note); delay(40); } break; } /* switch */ nosound(); } --------------------------------------------------------------------- <Á¦3ȸ ³¡> ´ÙÀ½ ±Û·Î °è¼Ó À̾îÁý´Ï´Ù. turbo28 Åͺ¸ÀÌ»¡ ÀÓ ÀÎ °Ç