#37 ÀÓÀ롂 (turbo28 ) [°­ÁÂ] CÆ÷ÀÎÅÍ4-1: Æ÷ÀÎÅÍ ¹è¿­ 03/06 01:05 144 line ÀÛ¼º ¿¬¿ùÀÏ: 1989.10.28 ¸¶ÀÌÅ©·Î¼ÒÇÁÆ®¿þ¾î °ÔÀç: 1989.12 HWP/TXT º¯È¯: 1993.3.5 >>> Á¤º¹ Åͺ¸ C <<< Á¦4ȸ ¸Å°³º¯¼ö°¡ ´ÙÂ÷¿ø ¹è¿­ÀÎ ÇÔ¼ö¿Í Æ÷ÀÎÅÍ ¹è¿­ÀÇ Á¤º¹ ±Û/ÀÓÀ롂 (¼­¿ï´ë ±â°è°øÇаú3) --------------------------------------------------------------------- 1 º»·Ð¿¡ ¾Õ¼­ --------------------------------------------------------------------- ÀÌÁ¦ ÀÌ Á¤º¹ Åͺ¸ C ¿¬Àçµµ ¸·¹ÙÁö¿¡ ´Ù´Ù¶ú´Ù. ¿ì¼±Àº Áö³­ ´Þ¿¡ ¸¶ Àú ¼³¸íÇÏÁö ¸øÇÑ "¸Å°³º¯¼ö°¡ ´ÙÂ÷¿ø ¹è¿­ÀÎ ÇÔ¼ö"¸¦ ¸¸µå´Â ¹æ¹ýºÎÅÍ ¼³ ¸íÇÒ ÀÛÁ¤ÀÌ´Ù. ¿©±â¿¡ °ü½ÉÀÌ ¾ø´Â µ¶ÀÚ´Â ±× ´ÙÀ½ Å« Á¦¸ñÀÎ "Æ÷ÀÎÅÍ ¹è ¿­"ºÎÅÍ ÀÐ¾î ³ª°¡±â ¹Ù¶õ´Ù. Æ÷ÀÎÅÍ ¹è¿­(pointer array)Àº, ¸ð¸£´Â »ç¶÷¿¡°Ô´Â Áö±ØÈ÷ »ý¼ÒÇÑ ¿ë ¾îÀÏ Å×Áö¸¸, C¿¡¼­ ´ë´ÜÈ÷ ºó¹øÇÏ°Ô ¾²ÀÌ´Â µ¥ÀÌÅÍÇüÀÌ´Ù. ¿Ö³ÄÇϸé C¿¡ ¼­´Â Æ÷ÀÎÅÍ ¹è¿­·Î ¹®ÀÚ¿­ ¹è¿­À» ±¸ÇöÇϱ⠶§¹®ÀÌ´Ù. ±×·¡¼­ Æ÷ÀÎÅÍ ¹è ¿­À» ¸ð¸£°í¼­´Â C¿¡¼­ ¹®ÀÚ¿­ ¹è¿­À» ¾µ ¼ö´Â ¾ø´Ù°í º¸¸é Ʋ¸²¾ø´Ù. À̹ø ´Þ¿¡´Â ƯÈ÷ C·Î ¹®ÀÚ¿­µéÀÇ (´ÙÂ÷¿ø) ¹è¿­À» ó¸®ÇÏ°íÀÚ ÇÏ´Â µ¶ÀÚ¿¡°Ô À¯ÀÍÇϸ®¶ó ¹Ï´Â´Ù. ±× µ¿¾È Æ÷ÀÎÅÍ ¹è¿­ÀÇ Á¤ÀÇ, ÃʱâÈ­, ÂüÁ¶ ¹æ¹ý¿¡ À־ ¿À´Â ¿©·¯ °¡Áö È¥µ¿À¸·Î ¸»¹Ì¾Ï¾Æ ÀûÀÝÀÌ °í»ýÇÑ µ¶ÀÚ´Â À̹ø ±âȸ¿¡ Æ÷ÀÎÅÍ ¹è¿­°ú ±× Á¦¹Ý »çÇ×À» ÇнÇÇÏ°Ô Á¤º¹Çϱ⠹ٶõ´Ù. ¶Ç ÇÑ Áö±Ý±îÁö ¹®ÀÚ¿­ ¹è¿­À» ÀÌÂ÷¿ø ¹®ÀÚ ¹è¿­·Î ±¸ÇöÇØ ¿Ô´ø µ¶ÀÚ´Â À̹ø ±ÛÀ» À¯½ÉÈ÷ Àо ÇÊ¿ä°¡ ÀÖ´Ù. ¾Æ¸¶ ¸Þ¸ð¸® ³¶ºñÀÇ Áø¼ö¸¦ ±ú´Ý°Ô µÉ °ÍÀÌ´Ù. ÀÌÁ¦ º»¹®À¸·Î µé¾î°¥ÅÙµ¥, ¾Æ¸¶ »çÈê Á¤µµ¸é ÀÌ ±ÛÀ» Á¤º¹ÇÒ ¼ö ÀÖÀ» °ÍÀ¸·Î º»´Ù. ±×¸®°í ÀÌ ±Û¿¡¼­ ¼Ò°³ÇÏ´Â ¿¹Á¦´Â ´«À¸·Î ÈȾÁö ¸»°í ¹Ý µå½Ã ½ÇÁ¦·Î Åͺ¸ C »ó¿¡¼­ ÀÔ·ÂÇÏ¿© ½ÇÇà½ÃÄÑ º¸´Â °ÍÀÌ ¿©·¯ °¡Áö·Î ¹Ù ¶÷Á÷ÇÏ´Ù. ¸»ÀÎ Áï º¹ÀâÇÑ ¼öÇÐ ¹®Á¦¸¦ ¾Ï»êÀ¸·Î ÇØ°áÇÏ·Á´Â ¸¸¿ëÀº »¡¸® ¹ö¸±¼ö·Ï ÁÁ´Ù´Â ¶æÀÌ´Ù. --------------------------------------------------------------------- 2 ¸Å°³º¯¼ö°¡ ´ÙÂ÷¿ø ¹è¿­ÀÎ ÇÔ¼ö --------------------------------------------------------------------- Áö³­ 11¿ù ¿¬Àç¿¡ ÀÌ¾î ¸Å°³º¯¼ö°¡ ´ÙÂ÷¿ø ¹è¿­ÀÎ ÇÔ¼ö¸¦ ¸¸µå´Â ¹æ¹ý À» °£·«ÇÏ°Ô ¾ð±ÞÇÑ ´ÙÀ½, ¹®ÀÚ¿­ ¹è¿­À» ±¸ÇöÇÏ´Â µ¥ ÇʼöºÒ°¡°áÇÑ Æ÷ÀÎ ÅÍ ¹è¿­¿¡ ´ëÇÏ¿© °è¼ÓÇؼ­ ¼³¸íÇØ ³ª°¡°Ú´Ù. ¿ì¼±, ¸Å°³º¯¼ö°¡ ´ÙÂ÷¿ø ¹è¿­ÀÎ ÇÔ¼ö¸¦ ¸¸µå´Â ¹æ¹ýÀº ÀÏÂ÷¿ø ¹è¿­ÀÇ °æ¿ì¸¸Å­À̳ª °£´ÜÇÏ´Ù. Áö³­ 11¿ù ¿¬Àç¿¡¼­ ½ÇÄÆ ¼³¸íÇÑ ´ÙÂ÷¿ø ¹è¿­ Æ÷ ÀÎÅ͸¦ »ç¿ëÇÏ¸é µÈ´Ù. <¿¹Á¦ 1>ÀÇ bubblesort¿Í printdays ÇÔ¼ö°¡ ±× ½Ç·ÊÀÌ´Ù. ¿©±â¼­ swap strÀº ¸Å°³º¯¼ö°¡ ÀÏÂ÷¿ø ¹è¿­ÀÎ ÇÔ¼öÀÌ´Ù. 11¿ù ¿¬À縦 ÃæºÐÈ÷ ÀÌÇØÇß´Ù ¸é ¾Æ¸¶ <¿¹Á¦ 1>ÂëÀº ½±°Ô ºÐ¼®ÇÒ ¼ö ÀÖÀ¸¸®¶ó »ý°¢µÈ´Ù. <¿¹Á¦ 1>´Â ±æ ÀÌ(¿­ÀÇ °¹¼ö)°¡ 3À¸·Î °íÁ¤µÇ¾î ÀÖ´Â 7°³(ÇàÀÇ°¹¼ö)ÀÇ ¿äÀϸíÀ» ¾ËÆĺª ¼øÀ¸·Î Á¤·ÄÇÏ´Â ÇÁ·Î±×·¥Àε¥, Á¤·ÄÇÏ´Â ¾Ë°í¸®ÁòÀ¸·Î´Â °ÅÇ° Á¤·Ä(bubbl e sort)À» ÅÃÇß´Ù. ¿ø·¡ ¹®ÀÚ¿­ ¹è¿­À» Á¤·ÄÇÏ·Á¸é »öÀÎ ¹è¿­(index arra y)À» µû·Î ¸¶·ÃÇÏ¿© Åà Á¤·Ä(tag sort)À» ÇÏ´Â °ÍÀÌ °¡Àå È¿À²ÀûÀÌÁö¸¸ ¿© ±â¼­´Â ¿¹Á¦ÀÎ ¸¸Å­ ±×·± ¹æ½ÄÀ» ÅÃÇÏÁö ¾Ê¾Ò´Ù. <¿¹Á¦ 1> °ÅÇ° Á¤·Ä ¾Ë°í¸®Áò¿¡ ÀÇÇÑ ÀÌÂ÷¿ø ¹®ÀÚ ¹è¿­ÀÇ Á¤·Ä --------------------------------------------------------------------- #define ROW 7 -+- ¸ÅÅ©·Î »ó¼öÀÇ Á¤ÀÇ #define COL 3 -+ +---- ÀÌÂ÷¿ø ¹è¿­ Æ÷ÀÎÅÍ void printdays(char (*days)[COL], unsigned row); -+ void bubblesort(char days[][COL], unsigned row); +- ÇÔ¼ö ¼±¾ð void swapstr(char s1[], char s2[], unsigned col); -+ void main(void) { char days[ROW][COL] = { {'S', 'U', 'N'},-+ {'M', 'O', 'N'}, | {'T', 'U', 'E'}, | {'W', 'E', 'D'}, +- ÀÌÂ÷¿ø ¹®ÀÚ ¹è¿­À» ´õ °£´ÜÇÏ°Ô ÃʱâÈ­ÇÏ´Â {'T', 'H', 'R'}, | ¹æ¹ýÀÌ ÀÖÁö¸¸ Á» ÀÖ´Ù°¡ ¾ð±ÞÇÏ°Ú´Ù. {'F', 'R', 'I'}, | {'S', 'A', 'T'},-+ }; bubblesort(days, ROW); printdays(days, ROW); } void printdays(char (*days)[COL], unsigned row) { | int i, j; +----------------+ | ¸Å°³º¯¼ö ¸®½ºÆ® ³»¿¡¼­ for (i = 0; i < row; i++) { | µÎ ¼±¾ðÀº ¿ÏÀüÈ÷ for (j = 0; j < COL; j++) | µ¿ÀÏÇÏ´Ù. printf("%c", days[i][j]); | printf("\n"); | } | } +-----------------+ | void bubblesort(char days[][COL], unsigned row) { register i, j; ºÎºÐ¹è¿­ÀÇ Å©±â(¿­ÀÇ °¹¼ö) for (i = 0; i < row - 1; i++) | for (j = row - 1; j > i; j--) | swapstr(days[j - 1], days[j], COL); } | | +-----------+----- ºÎºÐ¹è¿­¸í void swapstr(char s1[], char s2[], unsigned col) { register i, temp; for (i = 0; i < col; i++) { <--- ¿äÀϸíÀ» ºñ±³ÇÑ´Ù. if (s1[i] > s2[i]) break; else if (s1[i] < s2[i]) return; <--- s1ÀÌ s2º¸´Ù } ¾ÕÀÌ¸é ¸®ÅÏÇÑ´Ù. if (i == col) return; <--- µÎ ¿äÀϸíÀÌ ¿ÏÀüÈ÷ µ¿ÀÏÇÏ¸é ¸®ÅÏÇÑ´Ù. for (i = 0; i < col; i++) { <--- ¿äÀϸíÀ» ±³È¯ÇÑ´Ù. temp = s1[i]; s1[i] = s2[i]; s2[i] = temp; } } --------------------------------------------------------------------- ½ÇÇà °á°ú FRI MON SAT SUN THR TUE WED --------------------------------------------------------------------- <¿¹Á¦ 1>ÀÇ printdays¿Í bubblesort ÇÔ¼ö¸¦ º¸¾Æµµ ¾Ë ¼ö ÀÖ°ÚÁö¸¸ ÇÔ ¼öÀÇ ¸Å°³º¯¼ö ¸®½ºÆ®¿¡¼­´Â char (*days)[COL]°ú char days[][COL] µî 2 °¡Áö ¼±¾ðÀÌ ¿ÏÀüÈ÷ µ¿ÀÏ(identical)ÇÏ´Ù. ÀϹÝÀûÀ¸·Î ÇÔ¼öÀÇ ¸Å°³º¯¼ö ¸®½ºÆ®¿¡¼­ ¾Æ·¡ÀÇ µÎ ¼±¾ðÀº ¿ÏÀüÈ÷ µ¿ ÀÏÇÏ´Ù. ÇÔ¼öÀÇ ¸Å°³º¯¼ö ¸®½ºÆ® ³»¿¡¼­¸¸ ±×·¸´Ù´Â »ç½Ç¿¡ ÁÖÀÇÇϱ⠹ٶõ ´Ù. À̶§ °¢ ÷ÀÚÅ©±â´Â ¹°·Ð »ó¼ö ¼ö½ÄÀ̾î¾ß ÇÑ´Ù. +----------------------------------------+ | T arrayp[][size2][size3]......[sizen] | | | | T (*arrayp)[size2][size3]......[sizen] | +----------------------------------------+  #38 ÀÓÀ롂 (turbo28 ) [°­ÁÂ] CÆ÷ÀÎÅÍ4-2: Æ÷ÀÎÅÍ ¹è¿­ 03/06 01:07 273 line --------------------------------------------------------------------- 3 Æ÷ÀÎÅÍ ¹è¿­ --------------------------------------------------------------------- 3.1 Æ÷ÀÎÅÍ ¹è¿­À̶õ? Æ÷ÀÎÅÍ ¹è¿­(pointer array)À̶õ ¸» ±×´ë·Î Æ÷ÀÎÅÍ º¯¼ö°¡ ¹è¿­¿ä¼ÒÀÎ ¹è¿­À» ¶æÇÑ´Ù. Æ÷ÀÎÅÍ ¹è¿­ÀÌ ÇÊ¿äÇÑ ÀÌÀ¯´Â ¾Æ·¡¿Í °°´Ù. +-------------------------------------------------------------------+ | Æ÷ÀÎÅÍ ¹è¿­·Î ±æÀÌ°¡ ÀÏÁ¤Ä¡ ¾ÊÀº ¹®ÀÚ¿­µéÀÇ ¹è¿­À» ±¸ÇöÇÒ ¼ö ÀÖ´Ù | +-----------------------------------2--------------------------------+ ¸»ÀÎ Áï Æ÷ÀÎÅÍ ¹è¿­·Î ¹®ÀÚ¿­ »ó¼öµéÀÇ ¹è¿­À» ±¸ÇöÇÏÀÚ´Â °ÍÀÌ´Ù. C ¿¡´Â ¹®ÀÚ¿­ ¹è¿­À̶õ °ÍÀÌ ¿øÄ¢ÀûÀ¸·Î Á¸ÀçÇÏÁö ¾Ê´Â´Ù´Â °ÍÂëÀº ÀÍÈ÷ µé ¾î¼­ ¾Ë°í ÀÖÀ» ÁÙ·Î ¹Ï´Â´Ù. µû¶ó¼­ C¿¡¼­´Â ÀÌÂ÷¿ø ¹®ÀÚ ¹è¿­ ¶Ç´Â Æ÷ÀÎ ÅÍ ¹è¿­À» ½á¼­ ¹®ÀÚ¿­ ¹è¿­À» ±¸ÇöÇؾ߸¸ Çϴµ¥, ¿©±â¼­´Â ±× µÎ °¡Áö ¹æ¹ýÀ» ºñ±³ÇØ º½À¸·Î½á, Æ÷ÀÎÅÍ ¹è¿­·Î ¹®ÀÚ¿­ ¹è¿­À» ±¸ÇöÇÏ´Â ¹æ¹ýÀÌ ¿ùµîÇÏ°Ô È¿À²ÀûÀÎ ±î´ßÀ» ¼³¸íÇÏ°Ú´Ù. 3.2 ÀÌÂ÷¿ø ¹®ÀÚ ¹è¿­¿¡ ÀÇÇÑ ¹®ÀÚ¿­ ¹è¿­ÀÇ ±¸Çö°ú ±× ¹®Á¦Á¡ 2 ¹®ÀÚ¿­ ¹è¿­À» ±¸ÇöÇϱâ À§Çؼ­ ÀÌÂ÷¿ø ¹®ÀÚ ¹è¿­À» ¾µ ¶§¿Í Æ÷ÀÎÅÍ ¹è¿­À» ¾µ ¶§ÀÇ Â÷ÀÌÁ¡À» ¸íÈ®È÷ ´ëºñ½ÃÅ°±â À§ÇÏ¿© <¿¹Á¦ 2>°ú <¿¹Á¦ 3> ¸¦ ¸¶·ÃÇß´Ù. µÎ ¿¹Á¦ ¸ðµÎ 9°³ÀÇ ¹®ÀÚ¿­, Áï ¸Þ´º¸¦ ¹è¿­È­ÇÏ¿© for ¼øȯ ¹®À¸·Î È­¸é¿¡ Ãâ·ÂÇϵµ·Ï ÇÏ´Â °ÍÀÌ´Ù. ±×·±µ¥ ¹®ÀÚ¿­À» ¹è¿­È­ÇÏ´Â ¹æ¹ý ¿¡ À־ <¿¹Á¦ 2>¿Í <¿¹Á¦ 3>Àº ¼­·Î ÀüÇô ´Ù¸¥ ¹æ¹ýÀ» ÃëÇÏ°í ÀÖ´Ù. °ú ¿¬ ¸Þ¸ð¸®ÀÇ Àý¾à°ú ½ÇÇà ½Ã°£ÀÇ Àý¾àÀ̶ó´Â Ãø¸é¿¡¼­, ¾î´À ¹æ¹ýÀÌ ´õ È¿ À²ÀûÀΰ¡¸¦ ÁÖÀDZí°Ô »ìÆ캸±â ¹Ù¶õ´Ù. <¿¹Á¦ 2> ÀÌÂ÷¿ø ¹®ÀÚ ¹è¿­¿¡ À2ÇÇÑ ¸Þ´ºÀÇ Ãâ·Â --------------------------------------------------------------------- #define MAXMENU 9 <--- ¸Þ´ºÀÇ °¹¼ö #define MAXLENGTH 15 <--- ¸Þ´º Ç׸ñÀÇ ÃÖ´ë ±æÀÌ void main(void) { char s[MAXMENU + 1][MAXLENGTH + 1]; <--- ÀÌÂ÷¿ø ¹®ÀÚ ¹è¿­ÀÇ Á¤ÀÇ int i, sum; | +----- ³Î Á¾·á¹®ÀÚ¸¦ À§ÇÑ ¿©ºÐ +------------------ ÆíÀÇ»ó s[0]´Â ¾²Áö ¾Ê´Â´Ù. strcpy(s[1], " [1] Load"); --+ strcpy(s[2], " [2] Pick"); | ¹®ÀÚ¿­ »ó¼ö2¸¦ strcpy(s[3], " [3] New"); | sÀÇ °¢ ºÎºÐ¹è¿­¿¡ strcpy(s[4], " [4] Save"); | ÀÏÀÏÀÌ º¹»çÇÑ´Ù. strcpy(s[5], " [5] Write to"); | ÀÌ ¹®ÀÚ¿­ »ó¼öµéµµ strcpy(s[6], " [6] Directory"); | ¸Þ¸ð¸®ÀÇ ¾îµò°¡¿¡ strcpy(s[7], " [7] Change dir"); | ÀÚ¸®¸¦ Â÷ÁöÇÏ°í ÀÖ´Ù. strcpy(s[8], " [8] OS shell"); | (ÃÑ 108 ¹ÙÀÌÆ®) strcpy(s[9], " [9] Quit"); --+ for (i = 1; i <= MAXMENU; i++) -+ ¸Þ´º¸¦ Ãâ·ÂÇÑ´Ù. printf("%s\n", s[i]); -+2 printf("\nSize of array s: %d bytes.\n\n", sizeof(s)); ÀÌÂ÷¿ø ¹®ÀÚ ¹è¿­¿¡ ÇÒ´çµÈ ----+ ¸Þ¸ð¸® Å©±â¸¦ ±¸ÇÑ´Ù. for (sum = 0, i = 1; i <= MAXMENU; i++) sum += strlen(s[i]) + 1; printf("Total real length of all strings: %d bytes.\n\n", sum); printf("Total memory allocated: %d + %d = %d bytes.\n", sizeof(s), sum, sum + sizeof(s)); } --------------------------------------------------------------------- ½ÇÇ2à°á°ú [1] Load [2] Pick [3] New +-¹è¿­·Î ÀâÀº 160 ¹ÙÀÌÆ®¿Í ¸Þ¸ð¸®ÀÇ [4] Save | ¾îµò°¡¿¡ ¹®ÀÚ¿­ »ó¼ö·Î ÀúÀåµÇ¾î ÀÖ´Â [5] Write to | 108 ¹ÙÀÌÆ®¸¦ ÇÕÇÏ¸é °á±¹ 268 ¹ÙÀÌÆ®°¡ µÈ´Ù. [6] Directory +-----+ ½ÇÁ¦ ¹®ÀÚ¿­ »ó¼öµéÀÇ ÃÑ ¹ÙÀÌÆ® Å©±â(108)¿Í [7] Change dir | | ºñ±³ÇØ º¼ ¶§, ¸Þ¸ð¸® »ç¿ë¿¡ »ó´çÇÑ ³¶ºñ°¡ [8] OS shell | +-ÀÖÀ½À» ¾Ë ¼ö ÀÖ´Ù. [9] Quit | | Size of array s: 160 bytes. Total real l2ength of all strings: 108 bytes. Total memory allocated: 160 + 108 = 268 bytes. --------------------------------------------------------------------- <¿¹Á¦ 2>´Â ¹®ÀÚ¿­ÀÇ ¹è¿­À» ÀÌÂ÷¿ø ¹®ÀÚ ¹è¿­·Î ±¸ÇöÇÏ°í ÀÖ´Ù. ¶ÇÇÑ ÀÌÂ÷¿ø ¹è¿­ sÀÇ °¢ ºÎºÐ¹è¿­¿¡ strcpy ÇÔ¼ö¸¦ È£ÃâÇÏ¿© ¹®ÀÚ¿­À» ÀúÀåÇÏ °í ÀÖ´Ù. ±×·±µ¥ ÀÌ ¹æ¹ý¿¡´Â ´Ù¼Ò ºñÈ¿À²ÀûÀÎ ±¸¼®ÀÌ ÀÖ´Ù. ¿Ö³ÄÇϸé s¿¡ ±×³É ³²¾Æµµ´Â °ø°£ÀÌ ¸¹ÀÌ »ý±â±â ¶§¹®ÀÌ´Ù. ¸Þ´ºÀÇ Ç׸ñ Áß¿¡¼­ " [7] Change dir"°¡ 15ÀÚ·Î Á¦ÀÏ ±æ±â ¶§¹®¿¡ °¢ ºÎºÐ¹è¿­À2Ç Å©±â´Â, ³Î Á¾·á¹®ÀÚ(null terminator) '\0'À» À§ÇÑ ÇÑ ¹ÙÀÌÆ® ¸¦ Æ÷ÇÔÇÏ¿© ÃÑ 16¹ÙÀÌÆ®·Î ÀÏÁ¤Çϵµ·Ï MAXLENGTH + 1·Î Àâ¾Ò´Ù. µû¶ó¼­ s ÀÇ ºÎºÐ¹è¿­Àº ¸ðµÎ Å©±â°¡ 16À¸·Î ÀÏÁ¤ÇÑ 1Â÷¿ø ¹®ÀÚ ¹è¿­µéÀÌ´Ù. ±×·¹¼­ ¹è¿­ s´Â 16 * 10(ºÎºÐ¹è¿­ÀÇ °¹¼ö) == 160 ¹ÙÀÌÆ®ÀÇ ¸Þ¸ð¸®¸¦ Â÷ÁöÇÑ´Ù. Å©±â°¡ ÀÏÁ¤Ä¡ ¾ÊÀº ¹®ÀÚ¿­µéÀÇ ½ÇÁ¦ Å©±âÀÇ ÇÕÀº ³Î Á¾·á¹®ÀÚ±îÁö Æ÷ ÇÔÇÏ¿© 108 ¹ÙÀÌÆ® ¹Û¿¡ ¾È µÇ´Âµ¥µµ, ÀÌ°ÍÀ» 160 ¹ÙÀÌÆ®ÀÇ ÀÏÁ¤ÇÑ Æ²¿¡ ¿ì°Ü ³ÖÀ¸·Á´Ï ´ç¿¬È÷ ³²´Â °ø°£ÀÌ »ý±â´Â °ÍÀÌ´Ù. ¿©±â¼­ ÆÄ»ýµÇ´Â ¹®Á¦ Á¡À̶õ ¹2Ù·Î ±æÀÌ°¡ µé¾¦³¯¾¦ ÀÏÁ¤Ä¡ ¾ÊÀº ¹®ÀÚ¿­µéÀ» Å©±â°¡ ÀÏÁ¤ÇÑ ¹®ÀÚ ¹è¿­ ¾È¿¡ Áý¾î ³ÖÀ¸·Á´Âµ¥ ÀÖ´Ù. [±×¸² 1] ¹è¿­ sÀÇ ¹è¿­¿ä¼ÒµéÀÌ ³²¾Æµ·´Ù --------------------------------------------------------------------- strspy ÇÔ¼ö¿¡ ÀÇÇÑ ½ÇÁ¦·Î º¹»çµÈ ºÎºÐ ±×³É ³²¾Æµµ´Â ¹è¿­¿ä¼Ò 12¹ÙÀÌÆ® +------------+ +---------------------------------------------+ +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | N | e | w | \0| | | | | | | | | | | |2 | +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10][11][12][13][14][15] --------------------------------------------------------------------- ºÎºÐ¹è¿­ s[7]ÀÇ °æ¿ì¿¡´Â ¹®ÀÚ¿­ÀÇ ±æÀÌ¿Í ¹è¿­Å©±â°¡ Á¤È®È÷ µü µé ¾î ¸Â´Â´Ù. ±×·¯³ª ´Ù¸¥ ºÎºÐ¹è¿­µéÀº ÀüÇô ±×·¸Áö°¡ ¸øÇÏ´Ù. ¿¹¸¦ µé¾î ÀúÀåµÈ ¹®ÀÚ¿­ÀÇ ±æÀÌ°¡ °³Áß¿¡ °¡Àå ªÀº s[3] ºÎºÐ¹è¿­ÀÇ °æ¿ì [±×¸² 1] À» º¸¾Æµµ ¾Ë ¼ö ÀÖµíÀÌ ¹è¿­¿ä¼Ò°¡ 12¹ÙÀÌÆ®¾¿À̳ª ³²¾Æµ·´Ù. Áï À2ڱ׸¶ Ä¡ ÀÚ½ÅÀÇ 75%³ª µÇ´Â °ø°£À» ³¶ºñÇÏ°í ÀÖ´Ù´Â °è»êÀÌ ³ª¿Â´Ù. ÀÌ°ÍÀº »ó´çÈ÷ ºñÈ¿À²ÀûÀÎ ¸Þ¸ð¸® °ü¸® ¹æ½ÄÀÌ ¾Æ´Ò ¼ö ¾ø´Ù. °Ô´Ù°¡ strcpy ÇÔ¼ö¸¦ È£ÃâÇÏ¿© ¸Þ´º ¹®ÀÚ¿­À» sÀÇ ºÎºÐ¹è¿­¿¡ º¹»çÇÏ´Â °úÁ¤¿¡¼­ µµ ½ÇÇà ½Ã°£ÀÌ ¹«½Ã ¸øÇÒ Á¤µµ·Î Àâ¾Æ ¸ÔÈù´Ù. ¸¸¾à¿¡ ¸Þ´ºÀÇ °¹¼ö°¡ ¼ö ½Ê °³ Á¤µµ µÈ´Ù°í ÇÏ¸é ±× ¼Ò¿äµÇ´Â ½Ã°£µµ ´ç¿¬È÷ °í·Á ´ë»ó¿¡ Æ÷ÇÔ½ÃÄÑ ¾ß ÇÑ´Ù. ÇÏ¿©°£¿¡ <¿¹Á¦ 2>´Â ¿©·¯¸ð·Î ÇêÁ¡ Åõ¼ºÀÌÀÇ ÇÁ·Î±×·¥ÀÌ´Ù. »ç½Ç <¿¹ Á¦ 2>¿Í °°Àº ¹®ÀÚ¿­ ó¸® ¹æ½ÄÀº ÀÓÀÇ Á¢±Ù(random access)ÀÌ ÇÊ¿äÇ2Ò ¶§ ÀÌ¿Ü¿¡´Â ±× ¸Þ¸ð¸® ³¶ºñ°¡ ¿ö³« ½ÉÇϱ⠶§¹®¿¡ C¿¡¼­ º°·Î ¾²ÀÌÁö ¾Ê´Â ´Ù. <¿¹Á¦ 2>´Â ±×·¯´Ï±î ÆĽºÄ®¿¡¼­³ª ¾²¿´´ø ¹æ½ÄÀ̶ó°í ÇÒ ¼ö ÀÖ´Ù. ÆÄ ½ºÄ®¿¡¼­´Â := ¿¬»êÀÚ°¡ CÀÇ strcpy ÇÔ¼öÀÇ ¿ªÇÒÀ» ´ã´çÇÑ´Ù´Â »ç½ÇÀ» »ó ±âÇϱ⠹ٶõ´Ù. 3.3 Æ÷ÀÎÅÍ ¹è¿­¿¡ ÀÇÇÑ ¹®ÀÚ¿­ ¹è¿­ÀÇ ±¸Çö ¾ÕÀÇ ¸Þ¸ð¸® ³¶ºñÇü <¿¹Á¦ 2>º¸´Ù ÇÑ°á ³ªÀº ¹æ¹ýÀÌ ¾Æ·¡¿¡¼­ Á¦½ÃÇÏ ´Â <¿¹Á¦ 3>ÀÌ´Ù. Áï Æ÷ÀÎÅÍ ¹è¿­·Î ¹®ÀÚ¿­ÀÇ ¹è¿­À» ±¸ÇöÇÏ´Â ¹æ¹ýÀÌ´Ù. ¿©±â¼­ ÇÑ °¡Áö ÁÖÀÇÇÒ »çÇ×Àº, Á» Àü¿¡µµ ¸»ÇßµíÀÌ ¾ÖÃʺÎÅÍ C¿¡´Â ¹®À2Ú ¿­ ¹è¿­À̶õ °ÍÀÌ ÀüÇô Á¸ÀçÇÏÁö ¾Ê´Â´Ù´Â Á¡ÀÌ´Ù. ´Ù¸¸ Æ÷ÀÎÅÍ ¹è¿­À» È° ¿ëÇÏ¿© ¹®ÀÚ¿­ÀÇ ¹è¿­À» ±¸ÇöÇÒ »ÓÀÓÀ» ºÐ¸íÈ÷ ¤°í ³Ñ¾î°¡¾ß ÇÑ´Ù. ¿©±â ¿¡ ´ëÇÏ¿© ±¦ÇÑ Âø°¢ÀÌ ¾ø±â¸¦ ¹Ù¶õ´Ù. <¿¹Á¦ 3> Æ÷ÀÎÅÍ ¹è¿­¿¡ ÀÇÇÑ ¸Þ´ºÀÇ Ãâ·Â --------------------------------------------------------------------- #define MAXMENU 9 void main(void) { char *ps[MAXMENU + 1]; <--- Æ÷ÀÎÅÍ ¹è¿­ psÀÇ Á¤ÀÇ int i, sum; ps[1] = " [1] Load"; -+ ps[2] = " [2] Pick"; | ps[3] = " [32] New"; | ¹®ÀÚ¿­ »ó¼öÀÇ ¼±µÎ¹øÁö¸¦ ps[4] = " [4] Save"; | Æ÷ÀÎÅÍ ¹è¿­ÀÇ °¢ ¹è¿­¿ä¼Ò¿¡ ps[5] = " [5] Write to"; | ´ëÀÔÇÑ´Ù. Áï Æ÷ÀÎÅÍ ¹è¿­ÀÇ °¢ ¿ä¼Ò¸¦ ps[6] = " [6] Directory"; | ÃʱâÈ­ÇÑ´Ù. ps[7] = " [7] Change dir"; | ps[8] = " [8] OS shell"; | ps[9] = " [9] Quit"; -+ for (i = 1; i <= MAXMENU; i++) -+- ¸Þ´º¸¦ Ãâ·ÂÇÑ´Ù. printf("%s\n", ps[i]); -+ printf("\nSize of pointer array ps: %d bytes.\n\n", sizeof(ps)); 2 | Æ÷ÀÎÅÍ ¹è¿­ psÀÇ ¹ÙÀÌÆ® Å©±â °è»ê for (sum = 0, i = 1; i <= MAXMENU; i++) sum += strlen(ps[i]) + 1; printf("Total real length of all strings: %d bytes.\n\n", sum); printf("Total memory allocated: %d + %d = %d bytes\n", sizeof(ps), sum, sizeof(ps)+ sum); } --------------------------------------------------------------------- ½ÇÇà °á°ú [1] Load [2] Pick 2 [3] New [4] Save [5] Write to [6] Directory +- ¸Þ¸ð¸® ÇÒ´ç¿¡ °ÅÀÇ ³¶ºñ°¡ ¾ø´Ù. [7] Change dir +-------+ [8] OS shell | | Àüü ÇÒ´çµÈ ¸Þ¸ð¸® [9] Quit | | | | | (20 + 108) == 128 ¹ÙÀÌÆ® Size of pointer array ps: 20 bytes.| | +-¹®ÀÚ¿­ »ó¼öµéÀÇ ±æÀÌ | +--- Æ÷ÀÎÅÍ ¹è¿­À» À§ÇÑ °ø°£ Total real l2ength of all strings: 108 bytes. Total memory allocated: 20 + 108 = 128 bytes. --------------------------------------------------------------------- [±×¸² 2] Æ÷ÀÎÅÍ ¹è¿­ÀÌ ÃʱâÈ­µÈ Á÷ÈÄ »óȲÀÇ °³³äµµ --------------------------------------------------------------------- ±æÀÌ°¡ ÀÏÁ¤Ä¡ ¾ÊÀº Æ÷ÀÎÅÍ ¹è¿­ ps ¹®ÀÚ¿­ »ó¼öµé +-------+ +------------+ [0] | | +-------------| [1] Load\02 | +-------+ | +------------+ [1] | o --+-----------+ +------------+ +-------+ +-----------| [2] Pick\0 | [2] | o --+-------------+ +------------+ +-------+ +-----------+ [3] | o --+-------------------------| [3] New\0 | +-------+ +-----------+ [4] | o --+-------------+ +------------+ +-------+ +-----------| [4] Save\0 | [5] |o --+2-----------+ +------------+ +-------+ | +----------------+ [6] | o --+---------+ +-------------| [5] Write to\0 | +-------+ | +----------------+ [7] | o --+-------+ | +-----------------+ +-------+ | +---------------| [6] Directory\0 | [8] | o --+-----+ | +-----------------+ +-------+ | | +------------------+ [9] | o --+---+ | +-----------------|[7] Ch2ange dir\0 | | +-------+ | | +------------------+ | | | +----------------+ ¹è¿­¿ä¼Ò | +-------------------| [8] OS shell\0 | | +----------------+ | +------------+ +---------------------| [9] quit\0 | ´ëÀÔ ¿¬»êÀÚ =¿¡ ÀÇÇØ +------------+ °¢°¢ ÃʱâÈ­µÈ´Ù. ps[0]´Â ÀϹÝÀûÀ¸·Î 1ºÎÅÍ ½ÃÀ۵Ǵ ¸Þ´º Ç׸ñ ¹ø2È£¿Í ¹è¿­ÀÇ Ã·ÀÚ¸¦ ÀÚ¿¬½º·´°Ô ÀÏÄ¡½ÃÅ°±â À§ÇÏ¿© ÀǵµÀûÀ¸·Î »ç¿ëÇÏÁö ¾Ê¾Ò´Ù. ÀÌ ¶ÇÇÑ ¸Þ¸ð¸® 2 ¹ÙÀÌÆ®¸¦ Àâ¾Æ ¸ÔÁö¸¸ <¿¹Á¦ 2>¿¡¼­ 16 ¹ÙÀÌÆ® Å©±âÀÇ ºÎºÐ ¹è¿­ s[0]¸¦ ¸¸µé¾î ³õ°íµµ ¾²Áö ¾Ê´Â °Íº¸´Ù´Â ÇÑÂü ³´´Ù. ¿©±â¼­ ¿À È÷·Á s[0]¸¦ ¾ïÁö·Î »ç¿ëÇϸé, ¸Þ´º Ç׸ñ ¹øÈ£¿Í ÷ÀÚ°¡ ¼­·Î ÀÏÄ¡ÇÏ Áö ¾Ê´Â µ¥¼­ ¿À´Â È¥¶õÀ¸·Î ÀÎÇØ °á°úÀûÀ¸·Î´Â ¹ØÁö´Â Àå»ç°¡ µÈ´Ù. --------------------------------------------------------------------- <¿¹Á¦ 3>´Â [±×¸² 2]¸¦ Âü°íÇÏ¸é ¾î·ÆÁö ¾Ê°Ô2 ÀÌÇØÇÒ ¼ö ÀÖÀ¸¸®¶ó »ý °¢ÇÑ´Ù. ÀÌÁ¦´Â ÀϹÝÀûÀ¸·Î Æ÷ÀÎÅÍ ¹è¿­À» Á¤ÀÇÇÏ´Â ¹æ¹ý¿¡ ´ëÇؼ­ ¾Ë¾Æº¸ ÀÚ. ¹è¿­¿ä¼ÒÀÎ °¢ Æ÷ÀÎÅÍ°¡ °¡¸®Å°°í ÀÖ´Â ´ë»óü(object)ÀÇ µ¥ÀÌÅÍÇüÀÌ T¶ó°í ÇÒ ¶§, ´ÙÂ÷¿ø Æ÷ÀÎÅÍ ¹è¿­ÀÇ Á¤ÀÇ´Â ¾Æ·¡¿Í °°´Ù. T *arrayp[size1][size2]......[sizen]; | | | +------+------------+------- »ó¼ö ¼ö½ÄÀ̾î¾ß ÇÑ´Ù. ±×·±µ¥ »ç¿ë ºóµµ·Î ºÁ¼­ Æ÷ÀÎÅÍ ¹è¿­Àº ÀÏÂ÷¿øÀÏ °æ¿ì°¡ ŹÝÀÌ´Ù. ¹®ÀÚ¿­ÀÇ ´ÙÂ÷¿ø ¹è¿­À» ±¸ÇöÇÒ °æ¿ì¸¦ Á¦¿ÜÇÏ°í´Â2 Æ÷ÀÎÅÍ ¹è¿­À» ´ÙÂ÷¿ø À¸·Î ¸¸µé ÀÏÀ̶õ °ÅÀÇ ¾ø´Ù. ÇÑÆí Æ÷ÀÎÅÍ ¹è¿­ÀÇ ÃʱâÈ­´Â ´ÙÂ÷¿ø ¹è¿­ Æ÷ÀÎÅÍÀÇ °æ¿ì¿Í ÆÇÀÌÇÏ°Ô ´Ù¸£´Ù. ¿Ö³ÄÇϸé Æ÷ÀÎÅ͵éÀÇ ¹è¿­À̱⠶§¹®¿¡ ¸¶¶¥È÷ ¹è¿­¿ä¼ÒÀÎ °¢ Æ÷ÀÎ Å͵éÀ» ÀÏÀÏÀÌ ÃʱâÈ­ÇØ ÁÖ¾î¾ß Çϱ⠶§¹®ÀÌ´Ù. ±× ½Ç·Ê´Â <¿¹Á¦ 3>¸¦ Âü °íÇÏ¸é µÇ°Ú´Ù. Æ÷ÀÎÅÍ ¹è¿­¸íÀÎ ps¿¡ ´Ù¸¥ ¹è¿­¸íÀ» ¾Æ¹«·± »ý°¢¾øÀÌ ´ë ÀÔÇØ ¹ö¸®´Â ´©¸¦ Àý´ë ¹üÇؼ­´Â ¾È µÈ´Ù. ±×°Ç ±×·¸´Ù Ä¡°í ÇÁ·Î±×·¡¸Ó¶ó¸é ¹Ýµå½Ã ¾Æ·¡ÀÇ µÎ Á¤ÀÇÀÇ Â÷ÀÌÁ¡À» ¸íÈ®ÇÏ°Ô ±¸ºÐÇÒ ÁÙ ¾Ë¾Æ¾ß ÇÑ´Ù. char (*p2p)[3]; char *pq[3]; ù¹ø° °ÍÀº ¹è¿­¿ä¼Ò°¡ charÇüÀÌ°í Å©±â°¡ 3ÀÎ 1Â÷¿ø ºÎºÐ¹è¿­ÀÌ ´ë »óü°¡ µÇ´Â Æ÷ÀÎÅÍ pp¸¦ Á¤ÀÇÇÑ °ÍÀ¸·Î¼­, pp´Â °á±¹ ÀÌÂ÷¿ø ¹è¿­ Æ÷ÀÎÅÍ ¿¡ ÇØ´çÇÑ´Ù. ÀÌ Á¤ÀÇ´Â ÇϳªÀÇ Æ÷ÀÎÅÍ º¯¼ö pp¸¦ Á¤ÀÇÇÑ °ÍÀ̹ǷΠ´ÜÁö 2 ¹ÙÀÌÆ®¸¸ÀÇ ¸Þ¸ð¸®¸¸ÀÌ ¼Ò¿äµÈ´Ù. µÎ¹ø° °ÍÀº charÇü ´ë»óü¸¦ °¡¸®Å°´Â Å©±â°¡ 3ÀÎ Æ÷ÀÎÅÍ ¹è¿­ pq¸¦ Á¤ÀÇÇÑ °ÍÀÌ´Ù. ÀÌ Á¤ÀÇ´Â ¹è¿­¿ä¼ÒÀÎ ¼¼°³ÀÇ Æ÷ÀÎÅÍ pq[0], pq[1], pq[2] ¸¦ À§ÇÏ¿© ÃÑ 2 * 3 == 6 ¹ÙÀÌÆ®ÀÇ ¸Þ¸ð¸®¸¦ ÇÊ¿ä·Î ÇÑ´Ù. ´ÜÁö °ýÈ£¸¦ ½è´À³Ä 2¾È ½è´À³Ä¿¡ µû¶ó¼­ ÀÌó·³ ÀüÇô µý ÆÇÀÇ °á°ú¸¦ °¡Á®¿À¹Ç·Î Æ÷ÀÎÅ͸¦ Á¤ÀÇÇÒ ¶§´Â ±× Á¤ÀÇ°¡ °ú¿¬ ÀÚ½ÅÀÌ ¿øÇÏ´Â Æ÷ÀÎÅ͸¦ ¸¸µå´Â °ÍÀÎÁö ¾î¾Áö¸¦ ½ÅÁßÀ» ±âÇÏ¿© Àç»ïÀç»ç È®ÀÎÇØ º¸¾Æ¾ß ÇÒ °ÍÀÌ ´Ù. ±× ÀÌÀ¯´Â ¸¸¾à¿¡ Æ÷ÀÎÅ͸¦ À߸ø Á¤ÀÇÇÏ¿© »ç¿ëÇÑ´Ù ÇÏ´õ¶óµµ ¹«´øÈ÷ µµ °ü´ëÇÑ C ÄÄÆÄÀÏ·¯´Â "Suspicious pointer conversion" Á¤µµÀÇ °æ°í¸¸ À¸·Î ¶§¿ì°í ³ª¸ÓÁö ºÎºÐÀÇ ÄÄÆÄÀÏÀ» ¼º°øÀûÀ¸·Î ¼öÇàÇØ ¹ö¸®±â ¶§¹®ÀÌ´Ù. ´ÙÀ½ ±Û·Î °è¼Ó À̾îÁý´Ï´Ù. turbo28 Åͺ¸ÀÌ»¡ ÀÓ ÀÎ °Ç #39 ÀÓÀ롂 (turbo28 ) [°­ÁÂ] CÆ÷ÀÎÅÍ4-3: Æ÷ÀÎÅÍ ¹è¿­ 03/06 01:09 153 line 3.4 ragged ¹è¿­°ú rectangular ¹è¿­ ¾Õ¿¡¼­ ¾Ë¾Æº» ¹Ù¿Í °°ÀÌ C¿¡¼­ ¹®ÀÚ¿­ ¹è¿­(string array)À» ±¸ÇöÇÏ ´Â ¹æ¹ýÀº Å©°Ô µÎ °¡Áö·Î ³ª´­ ¼ö ÀÖ´Ù. --------------------------------------------------------------------- [1] ÀÌÂ÷¿ø ¹®ÀÚ ¹è¿­·Î ¹®ÀÚ¿­ ¹è¿­À» ±¸ÇöÇÑ´Ù. <¿¹Á¦ 2>ÀÇ ¹è¿­ s°¡ ÀÌ¿¡ ÇØ´çµÈ´Ù. [2] ¹®ÀÚ¸¦ °¡¸®Å°´Â ÀÏÂ÷¿ø Æ÷ÀÎÅÍ ¹è¿­·Î ¹®ÀÚ¿­ ¹è¿­À» ±¸ÇöÇÑ´Ù. <¿¹Á¦ 3>ÀÇ ¹è¿­ ps°¡ ÀÌ¿¡ ÇØ´çµÈ´Ù. --------------------------------------------------------------------- ¹2®ÀÚ¿­ ¹è¿­À» À§ÀÇ [1]¹ø ¹æ¹ýÀ¸·Î ±¸ÇöÇßÀ» ¶§, ±× ¹è¿­ÀÇ ÇüŸ¦ Ưº°È÷ À̸§ÇÏ¿© "rectangular ¹è¿­"À̶ó°í ÇÑ´Ù. ±× ¹Ý¸é ¹®ÀÚ¿­ ¹è¿­À» [2]¹ø ¹æ¹ýÀ¸·Î ±¸ÇöÇßÀ» ¶§´Â ±× ¹è¿­ÀÇ ÇüŸ¦ "ragged ¹è¿­"À̶ó°í ºÎ ¸¥´Ù. Áï rectangular ¹è¿­Àº ÀÌÂ÷¿ø ¹è¿­ÀÇ ÇÑ Á¾·ùÀÌ°í, ragged ¹è¿­Àº ÀÏÂ÷¿ø Æ÷ÀÎÅÍ ¹è¿­ÀÇ ÇÑ Á¾·ù¶ó°í º¸¸é µÈ´Ù. Âü°í·Î Åͺ¸ ÆĽºÄ®ÀÇ ¹®ÀÚ ¿­ ¹è¿­Àº rectangular ¹è¿­¿¡ ¼ÓÇÑ´Ù. [±×¸² 3] ¹®ÀÚ¿­ ¹è¿­ÀÇ 2°¡Áö ±¸Çö ¹æ¹ý ---------------------------------------------------------------2------ +-- ragged ¹è¿­ ÇüÅ ----------- ÀÏÂ÷¿ø Æ÷ÀÎÅÍ ¹è¿­ ¹®ÀÚ¿­ ¹è¿­ -+ +-- rectangular ¹è¿­ ÇüÅ ------ ÀÌÂ÷¿ø ¹®ÀÚ ¹è¿­ --------------------------------------------------------------------- ÀÌó·³ ¹®ÀÚ¿­ ¹è¿­Àº µÎ °¡Áö ÇüÅ·Π±¸ÇöÇÒ ¼ö Àֱ⠶§¹®¿¡, ¹®ÀÚ¿­ ¹è¿­À» ¾ð±ÞÇÒ ¶§¿¡´Â ¿øÄ¢ÀûÀ¸·Î ¹®ÀÚ¿­ ¹è¿­ÀÌ ragged ¹è¿­ ÇüŸ¦ ÀÌ·ç °í ÀÖ´ÂÁö, ¾Æ´Ï¸é rectangular ¹è¿­ ÇüŸ¦ ÀÌ·ç°í ÀÖ´ÂÁö ¸í½ÃÇÏ´Â °ÍÀÌ ÁÁ´Ù. ±×·¯³ª C¿¡¼­´Â ¸Þ¸ð¸®¸¦ Ã2Ö´ëÇÑÀ¸·Î Àý¾àÇϱâ À§ÇØ ÀϹÝÀûÀ¸·Î ¹®ÀÚ ¿­ ¹è¿­À» ragged ¹è¿­·Î ±¸ÇöÇÏ´Â °ÍÀÌ º¸ÅëÀ̹ǷÎ, ÀÌ ±Û¿¡¼­´Â Ưº°ÇÑ ¾ð±ÞÀÌ ¾ø´Â ÇÑ "¹®ÀÚ¿­ ¹è¿­Àº ragged ¹è¿­"ÀÎ °ÍÀ¸·Î ÇÏ°Ú´Ù. ´Ù½Ã ¸»ÇØ ¼­, +-------------------------------------------------------+ | "¹®ÀÚ¿­ ¹è¿­ == ¹®ÀÚ¿­À» °¡¸®Å°´Â ÀÏÂ÷¿ø Æ÷ÀÎÅÍ ¹è¿­" | +-------------------------------------------------------+ À̶ó´Â ¶æÀ¸·Î »ç¿ëÇÏ°Ú´Ù. ¹°·Ð ¾î¼´Ù È¥µ¿ÀÇ ¿°·Á°¡ ÀÖÀ» ¶§´Â ±× ¹è¿­ ÀÇ ÇüŸ¦ Á÷Á¢ ¸í½ÃÇÒ °ÍÀÌ´Ù. ¾Æ·¡ÀÇ [2±×¸² 4]´Â <¿¹Á¦ 4>ÀÇ days ¹è¿­°ú months ¹è¿­À» ¾Ë±â ½±°Ô ±×¸²À¸·Î Ç¥½ÃÇÑ °ÍÀÌ´Ù. [±×¸² 4]¸¦ º¸¸é ±Ý¹æ ¾Ë ¼ö ÀÖ°ÚÁö¸¸ months ¹è ¿­Àº µé¾¦³¯¾¦ÇÏ°í, days ¹è¿­Àº ¹ÙµÏÆÇ ´«±Ý ¸ð¾çÀÇ Á÷»ç°¢Çüó·³ »ý°å ´Ù. ragged¿Í rectangular¶ó´Â ¿ë¾îµµ »ç½ÇÀº [±×¸² 4]¿¡¼­ º¼ ¼ö ÀÖ´Â ¹è ¿­ÀÇ ÇüÅ¿¡¼­ À¯·¡µÈ ¸»ÀÌ´Ù. [±×¸² 4] ragged ¹è¿­°ú rectangular ¹è¿­ÀÇ °³³äµµ --------------------------------------------------------------------- [ ragged ¹è¿­ ] [ rectangular ¹è¿­ ] 2 ÀÏÂ÷¿ø Æ÷ÀÎÅÍ ¹è¿­ ÀÌÂ÷¿ø ¹®ÀÚ ¹è¿­ months days +-------+ +-----------+ +---+---+---+---+ [0] | | +-----| January\0 | days[0]| | | | | +-------+ | +-----------+ +---+---+---+---+ [1] | o --+---+ +------------+ days[1]| S | U | N | \0| +-------+ +-----| February\0 | +---+---+---+---+ [2] | o --+---+ +--2----------+ days[2]| M | O | N | \0| +-------+ +---------+ +---+---+---+---+ [3] | o --+---------| March\0 | days[3]| T | U | E | \0| +-------+ +---------+ +---+---+---+---+ +-------+ +------------+ +---+---+---+---+ [12]| o --+---------| December\0 | days[7]| S | A | T | \0| +-------+ +------------+ +---+---+---+---+ | 2 | | | ±æÀÌ°¡ ¼­·Î ´Ù¸¥ ±æÀÌ°¡ ¶È°°Àº ¹®ÀÚ¿­µéÀÇ ¹è¿­¿¡ ¹®ÀÚ¿­µéÀÇ ¹è¿­¿¡ Àû´çÇÔ Àû´çÇÔ * °¢ ¿äÀϸí°ú ¿ù¸íÀ» ÷ÀÚ¿Í ÀÚ¿¬½º·´°Ô ÀÏÄ¡½ÃÅ°±â À§ÇØ days[0]¿Í mont hs[0]´Â »ç¿ëÇÏÁö ¾Ê¾Ò´Ù. --------------------------------------------------------------------- ¾î¶² °æ¿ì¿¡ rectangular ¹è¿­À» »ç¿ëÇÏ°í, ¶Ç¾î¶² °æ¿ì¿¡ ra2gged ¹è ¿­À» »ç¿ëÇÒ °ÍÀÎÁöÀÇ ¼±ÅûóÀÇ ¹®Á¦´Â °£´ÜÈ÷ ÇØ°áµÈ´Ù. <¿¹Á¦ 4>ÀÇ ¿ù¸í °ú °°ÀÌ ¹è¿­·Î ¸¸µé°íÀÚ ÇÏ´Â °¢ ¹®ÀÚ¿­ÀÇ ±æÀÌ°¡ °¢°¢ ¼­·Î ´Ù¸£´Ù¸é ra gged ¹è¿­·Î ±¸¼ºÇÏ´Â °ÍÀÌ ¸Þ¸ð¸® Àý¾à»ó ´Ü¿¬ À¯¸®ÇÏ´Ù. ¹Ý¸é¿¡ <¿¹Á¦ 4>ÀÇ ¿äÀϸí°ú °°ÀÌ ¹®ÀÚ¿­ÀÇ ±æÀÌ°¡ ¸ðµÎ ¶È°°´Ù¸é rec tangular ¹è¿­À» ±¸¼ºÇÏ´Â °ÍÀÌ ¸Þ¸ð¸® Àý¾à»ó ragged ¹è¿­º¸´Ù ´Ù¼Ò À¯¸® ÇÏ´Ù. ÇÏÁö¸¸ ÀÌ °æ¿ì¿¡´Â °¡±ÞÀû ¹è¿­ÀÇ Á¤ÀÇ¿Í µ¿½Ã¿¡ ÃʱâÈ­¸¦ Çؾ߸¸, Áï ±× ¹è¿­ÀÇ ¼±¾ð¹®¿¡¼­ ÃʱâÈ­Çؾ߸¸ ¸Þ¸ð¸®¸¦ ³¶ºñÇÏÁö ¾Ê°Ô µÈ´Ù. <¿¹Á¦2 4>ÀÇ days ¹è¿­Ã³·³ strcpy ÇÔ¼ö·Î ¹è¿­À» ÃʱâÈ­ÇÏ¸é ¸Þ¸ð¸®»ó ¿¡ µ¿ÀÏÇÑ ¹®ÀÚ¿­ÀÌ µÎ °³¾¿ ÀÌÁßÀ¸·Î Á¸ÀçÇÏ´Â °á°ú°¡ µÇ¾î ´ë´ÜÇÑ ³¶ºñ °¡ ¾Æ´Ò ¼ö ¾ø´Ù. ¹°·Ð ÀúÀåÇÒ °¢ ¹®ÀÚ¿­ÀÇ ±æÀÌ°¡ ¼ö½Ã·Î º¯ÇÑ´Ù¸é ¹Ýµå ½Ã ³Ë³ËÇÑ Å©±âÀÇ rectangular ¹è¿­·Î Á¤ÀÇÇØ¾ß ÇÑ´Ù´Â Á¡À» ºÐ¸íÈ÷ ¤°í ³Ñ¾î°¡¾ß ÇÒ °ÍÀÌ´Ù. °á·ÐÀûÀ¸·Î ragged ¹è¿­Àº ¹®ÀÚ¿­ »ó¼öµéÀÇ ¹è¿­À» ¸¸µé ¶§ ÈçÈ÷ ¾²ÀÌ ´Â ÇüŶó°í º¸¸é °ÅÀÇ Æ²¸²¾ø´Ù. ÇÑÆí <¿¹Á¦ 4>´Â µÎ ¹è¿­(ƯÈ÷ days)À» Á¤ÀÇ¿Í µ¿½Ã¿¡ ÃʱâÈ­¸¦ ÇÏÁö ¾Ê¾Ò±â ¶§¹®¿¡ ¸Þ¸ð¸®¸¦ »2ó´çÈ÷ ³¶ºñÇÏ°í ÀÖ´Ù. µû¶ó¼­ °áÄÚ Àß µÈ ÇÁ·Î±× ·¥À̶ó°í ÇÒ ¼ö ¾ø´Ù. ±×·¯¹Ç·Î ragged ¹è¿­°ú rectangular ¹è¿­À» Á¤ÀÇÇÏ ´Â ¹æ¹ýÀ» ¼­·Î ºñ±³ÇØ º¸°í, ¶ÇÇÑ [±×¸² 4]¸¦ ÀÌÇØÇϱâ À§ÇÑ ÀӽùæÆí ÇÁ ·Î±×·¥À¸·Î »ý°¢Çϱ⠹ٶõ´Ù. <¿¹Á¦ 4> ragged ¹è¿­°ú rectangular ¹è¿­ÀÇ ºñ±³ --------------------------------------------------------------------- void main(void) { static char days[8][4]; static char *months[13]; int i; strcpy(days[1], "SUN"); -+ strcpy(days[2], "MON"); 2| strcpy(days[3], "TUE"); | ÀÌÂ÷¿ø ¹®ÀÚ ¹è¿­ÀÇ °¢ ºÎºÐ¹è¿­¿¡ strcpy(days[4], "WED"); | ¹®ÀÚ¿­ »ó¼öµéÀ» º¹»çÇÏ¿© ÃʱâÈ­ÇÑ´Ù. strcpy(days[5], "THU"); | strcpy(days[6], "FRI"); | strcpy(days[7], "SAT"); -+ months[1] = "January"; -+ months[2] = "February"; | months[3] = "March"; | months[4] = "April"; | months[5] = "May"; | months[6] = "June"; | months[7] = "July"; | Æ÷ÀÎÅÍ ¹è¿­ÀÇ °2¢ ¹è¿­¿ä¼Ò¸¦ months[8] = "August"; | ÃʱâÈ­ÇÑ´Ù. months[9] = "September"; | months[10] = "October"; | months[11] = "November"; | months[12] = "December"; -+ for (i = 1; i <= 7; i++) printf("%-4s", days[i]); printf("\n"); for (i = 1; i <= 12; i++) printf("%-10s", months[i]); printf("\n"); } --------------------------------------------------------------------- ½ÇÇà °á°ú SUN MON TUE WED THU FRI SAT January F2ebruary March April May June July August September October November December --------------------------------------------------------------------- ÀÚ, ´Ã ±×·¨µíÀÌ ÀÌÂë¿¡¼­ ¸¶¼Ò¸¦ Á¢¾îµÎ°í ÀÏ´Ü ¸Ó¸®¸¦ ½ÄÈ÷´Â °Ô ÁÁ À» °Í °°´Ù. ³Ê¹« ÇѲ¨¹ø¿¡ ¸¹Àº °ÍÀ» ¾Ë·Á°í Çϱ⠺¸´Ù´Â ¿©·¯ ³¯¿¡ °ÉÃÄ ÇÑ ºÎºÐ¾¿ ÁýÁßÀûÀ¸·Î Ž±¸ÇÏ´Â °Ô È¿°úÀûÀ̶ó´Â °ÍÂëÀº Çö¸íÇÑ µ¶ÀÚ¶ó¸é ÀÍÈ÷ ±ú´Ý°í ÀÖÀ» ÁÙ·Î ¹Ï´Â´Ù. ±×·³ ÀÖ´Ù°¡ ¶Ç º¾½Ã´Ù. ´ÙÀ½ ±Û·Î °è¼Ó À̾îÁý´Ï´Ù. turbo28 Åͺ¸ÀÌ»¡ ÀÓ ÀÎ °Ç #40 ÀÓÀ롂 (turbo28 ) [°­ÁÂ] CÆ÷ÀÎÅÍ4-4: Æ÷ÀÎÅÍ ¹è¿­ 03/06 01:11 358 line --------------------------------------------------------------------- 4 Æ÷ÀÎÅÍÀÇ Æ÷ÀÎÅÍ --------------------------------------------------------------------- 4.1 Æ÷ÀÎÅÍÀÇ Æ÷ÀÎÅ͸¦ ½á¾ß ÇÏ´Â ÀÌÀ¯ Æ÷ÀÎÅÍÀÇ Æ÷ÀÎÅ͸¦ ¼³¸íÇϱâ Àü¿¡ ¸ÕÀú ±×°ÍÀ» ½á¾ßÇÏ´Â ÀÌÀ¯¸¦ ±»ÀÌ µûÁö°í µé¸é Å©°Ô µÎ °¡Áö¸¦ ²ÅÀ» ¼ö ÀÖ´Ù. --------------------------------------------------------------------- [1] ¸Å°³º¯¼ö°¡ Æ÷ÀÎÅÍ ¹è¿­(¹®ÀÚ¿­ ¹è¿­)ÀÎ ÇÔ¼ö¸¦ ÀÛ¼ºÇϱâ À§ÇÏ¿© [2] ¸í·ÉÇà ÀÎÀÚ(command-line argumen2t)¸¦ »ç¿ëÇϱâ À§ÇÏ¿© --------------------------------------------------------------------- ÀÌ Áß¿¡¼­ µÎ¹ø°´Â Áö¸é °ü°è»ó ¼³¸íÇϱⰡ °ï¶õÇϱ⠶§¹®¿¡ ÀÌ ±Û¿¡ ¼­´Â ù¹ø°¿¡ °üÇØ ÁýÁßÀûÀ¸·Î ¼³¸íÇÒ ÀÛÁ¤ÀÌ´Ù. 4.2 Æ÷ÀÎÅÍ º¯¼öÀÇ Æ÷ÀÎÅÍ Æ÷ÀÎÅÍÀÇ Æ÷ÀÎÅÍ(pointer to potiner)´Â ±× ´ë»óü(object)°¡ Æ÷ÀÎÅÍ ÀÎ Æ÷ÀÎÅÍ º¯¼ö¸¦ ÁöĪÇÑ´Ù. ¸»ÀÌ ´Ù¼Ò ºñºñ ²¿ÀÌ´Â ±âºÐÀÌ µé¾î ´Ù½Ã Ç® ¾î¼­ ¾ê±âÇÏÀÚ¸é, Æ÷ÀÎÅÍÀÇ Æ÷ÀÎÅÍ´Â ±× Æ÷ÀÎÅÍ º¯¼ö°¡ °¡¸®Å°´Â ´ë»óü°¡ Æ÷ÀÎÅÍ º¯¼ö, Æ÷ÀÎÅÍ ¹è¿­À̳ª ¶Ç´Ù¸¥ Æ2÷ÀÎÅÍÀÎ Æ÷ÀÎÅͶó´Â ¶æÀÌ´Ù(¿ª½Ã ²¿ÀδÙ). ÀÌ Àý¿¡¼­´Â Æ÷ÀÎÅÍ ¹è¿­À» ¸Å°³º¯¼ö·Î ÃëÇÏ´Â ÇÔ¼ö¸¦ Á¤º¹Çϱâ À§ÇÑ ÀüÃÊ ÀÛ¾÷À¸·Î¼­ Æ÷ÀÎÅÍÀÇ Æ÷ÀÎÅÍ, ±× Áß¿¡¼­µµ Æ÷ÀÎÅÍ º¯¼öÀÇ Æ÷ÀÎÅ͸¦ »ç¿ëÇÏ´Â ¹æ¹ý 3´Ü°è¸¦ ¾Ë¾Æ º¸µµ·Ï ÇÏ°Ú´Ù. 4.3 Á¦1´Ü°è: Á¤ÀÇ ¿¹¸¦ µé¾î ¾î¶² Æ÷ÀÎÅÍ pa°¡ TÇü Æ÷ÀÎÅͶó°í ÇÑ´Ù¸é ±×°ÍÀ» Á¤ÀÇÇÏ´Â ¹æ¹ýÀº ¾Æ·¡¿Í °°´Ù. T´Â ¿øÄ¢ÀûÀ¸·Î ÀÓÀÇÀÇ µ¥ÀÌÅÍÇüÀÌÁö¸¸, ¿©±â¼­´Â ÀÌ ÇØÇϱ⠽±µµ·Ï ÆíÀÇ»ó intÇü °°Àº »ê¼úÇü(arithmetic type) ÁßÀÇ Çϳª¶ó°í »ý°¢ÇÏ¸é µÈ´Ù. T *2pa; ÀÌÁ¦ ´ë»óü°¡ TÇüÀÎ Æ÷ÀÎÅÍÇü, Áï (T *)ÇüÀ» »õ·ÎÀÌ PÇüÀ̶ó°í ÇÏÀÚ. ±×·¯¸é ´ë»óü°¡ PÇüÀÎ Æ÷ÀÎÅÍ ppa¸¦ ¾Æ·¡¿Í °°ÀÌ Á¤ÀÇÇÑ´Ù°í Çصµ ¾Æ¹«·± ¹®Á¦°¡ ¾ø´Ù. ¿Ö³ÄÇϸé Æ÷ÀÎÅÍÀÇ ´ë»óü¿¡´Â ÀüÇô Á¦ÇÑÀÌ ¾ø±â ¶§¹®ÀÌ´Ù. P *ppa; ÀÌ°ÍÀ¸·Î¼­ Æ÷ÀÎÅÍÀÇ Æ÷ÀÎÅÍ ppaÀÇ Á¤ÀÇ´Â °ÅÀÇ ³¡³ª°¡´Â ¼ÀÀÌ´Ù. ÀÌ Á¦´Â ´Ü¼øÈ÷ À§ÀÇ Á¤ÀÇ¿¡¼­ PÇüÀ» ¹Ì¸® ¾à¼ÓÇصР(T *)ÇüÀ¸·Î ġȯÇϱ⸸ ÇÏ¸é µÈ´Ù. ġȯÇÒ ¶§ ±¸µÎÁ¡(punctuator)ÀÇ ¿ì¼±¼øÀ§¸¦ ´«À¸·Î Á÷Á¢ È®ÀÎ ÇÒ ¼ö ÀÖµµ·Ï Çϱâ À§ÇØ °ýÈ£¸¦ ÀǵµÀûÀ¸·Î »ç¿ë2ÇÏ¿´´Ù. T *(*ppa); ±×·¯³ª °ýÈ£¸¦ »ý·«ÇÏ´õ¶óµµ ¿ì¼±¼øÀ§¿¡´Â º¯µ¿ÀÌ ¾øÀ¸¹Ç·Î °á±¹ ¾Æ·¡ ¿Í °°ÀÌ µÈ´Ù. µåµð¾î ppa´Â ´ë»óü°¡ TÇü Æ÷ÀÎÅÍ(º¯¼ö ¶Ç´Â »ó¼ö)ÀÎ Æ÷ÀÎ ÅÍ º¯¼ö·Î½á Á¤ÀÇµÈ °ÍÀÌ´Ù. +----------+ | T **ppa; | +----------+ Æ÷ÀÎÅÍÀÇ Æ÷ÀÎÅ͸¦ Á¤ÀÇÇÏ´Â ¹æ¹ýÀº ÀÌ¿Í °°ÀÌ °£´ÜÇÏ´Ù. º¯¼ö¸í ppa ¾Õ¿¡ ´ÜÁö **¸¦ ºÙ¿© Áֱ⸸ ÇÏ¸é ±×¸¸ÀÎ °ÍÀÌ´Ù. ¸¶Âù°¡Áö·Î °ÅÀÇ ¾²ÀÌ´Â ÀÏÀº ¾øÁö¸¸, ¿¹ÄÁµ¥ Æ÷ÀÎÅÍÀÇ Æ÷ÀÎÅÍÀÇ Æ÷ÀÎ Å͸¦ Á¤ÀÇÇÑ´Ù°í ÇÒ °Í °°À¸¸é, º¯¼ö¸í ¾Õ¿¡ ***¸¦ º2ÙÀÌ´Â °Í ¹Û¿¡ ÇÒ ÀÏ ÀÌ ¾ø´Ù. ½±°Ô ¸»Çؼ­ "Æ÷ÀÎÅÍ..."¶ó´Â ¿ë¾îÀÇ °¹¼ö ¸¸Å­ ±¸µÎÁ¡ *¸¦ º¯¼ö ¸í ¾Õ¿¡ ºÙ¿© ÁÖ¸é µÈ´Ù. ´çÀå ÀÌÇØ°¡ °¥¸¥Áö ¸ð¸£°Ú´Âµ¥ ¾î·µç ¾Æ·¡ÀÇ p ppa´Â "´ë»óü°¡ TÇü Æ÷ÀÎÅÍÀÇ Æ÷ÀÎÅÍÀÎ Æ÷ÀÎÅÍ º¯¼ö"ÀÌ´Ù?!?? T *(*(*ppa)); ¶Ç´Â T ***pppa; 4.4 Á¦2´Ü°è: ÃʱâÈ­ ppa¸¦ ÃʱâÈ­½ÃÅ°·Á¸é ¿ì¼± "ÃʱâÈ­µÇ¾î ÀÖ´Â TÇü Æ÷ÀÎÅÍ"°¡ ¸¶·ÃµÇ¾î ÀÖ¾î¾ß ÇÑ´Ù. ¿©±â¼­´Â ¾Æ·¡¿Í °°ÀÌ Á¤Àǵǰí ÃʱâÈ­µÈ TÇü Æ÷ÀÎÅÍ º¯¼ö p a¸¦ °¡Áö°í ppa¸¦ ÃʱâÈ­ÇÏ°íÀÚ ÇÑ´Ù. T *pa, a = 3;2 pa = &a; <--- paÀÇ ÃʱâÈ­ ppa´Â ´ë»óü°¡ TÇü Æ÷ÀÎÅÍÀÎ ¶Ç´Ù¸¥ Æ÷ÀÎÅÍ º¯¼öÀ̹ǷÎ, ppa¿¡ ´ëÀÔ ÇÒ ¼ö ÀÖ´Â °ªÀº TÇü Æ÷ÀÎÅ͸¦ °¡¸®Å°°í ÀÖ´Â Æ÷ÀÎÅÍ¿©¾ß ÇÑ´Ù. ¿¹ÄÁµ¥ pp a¿¡´Â TÇü Æ÷ÀÎÅÍ º¯¼ö paÀÇ ¹øÁö°ªÀ» ´ëÀÔÇØ ÁÖ¾î¾ß ÇÑ´Ù. ppa¿¡ TÇü Æ÷ ÀÎÅ͸¦ Á÷Á¢ ´ëÀÔÇϸé Àý´ë·Î ¾È µÈ´Ù. ÀÚ¼¼ÇÑ »çÇ×Àº [Ç¥ 1]À» Âü°íÇϱ⠹ٶõ´Ù. --------------------------------------------------------------------- ¿Ã¹Ù¸¥ ÃʱâÈ­ Ʋ¸° ÃʱâÈ­ °æ°í ¸Þ½ÃÁö ---------------------------------------------------2------------------ ppa = &pa; ppa = pa; "Suspicious pointer conversion" ppa = *pa; "Non-portable pointer assignment" *ppa = pa; "Possible use of 'ppa' before definition" **ppa = a; "Possible use of 'ppa' before definition" ppa = &&a; Error: "Expression syntax" --------------------------------------------------------------------- ÀÌÁ¦ pa¿Í ppaÀÇ ÃʱâÈ­°¡ ´Ù ³¡³µ´Ù. [±×¸² 5a]¿Í [±×¸² 5b]¸¦ Âü°í ·Î ÇÏ¿© ppa2ÀÇ °³³äÀ» º¸´Ù È®½ÇÈ÷ Çصα⠹ٶõ´Ù. [±×¸² 5a] ppa°¡ ÃʱâÈ­µÈ Á÷ÈÄÀÇ °³³äµµ --------------------------------------------------------------------- TÇü Æ÷ÀÎÅÍÀÇ Æ÷ÀÎÅÍ TÇü Æ÷ÀÎÅÍ TÇü º¯¼ö ppa pa a +-------+ +-------+ +-------+ | o --+---------->| o --+------------>| 3 | +-------+ ppa = &pa +-------+ pa = &a +-------+ ----------------------------------------2----------------------------- [±×¸² 5b] ppa°¡ ÃʱâÈ­µÈ Á÷ÈÄÀÇ ½ÇÁ¦ »óȲ --------------------------------------------------------------------- TÇü Æ÷ÀÎÅÍÀÇ Æ÷ÀÎÅÍ TÇü Æ÷ÀÎÅÍ TÇü º¯¼ö ppa pa a +-------+ +-------+ +-------+ | &pa | | &a | | 3 | +-------+ +-------+ +-------+ paÀÇ ¹øÁö°ªÀÌ aÀÇ ¹øÁö°ªÀÌ 2 µé¾î ÀÖ´Ù. µé¾î ÀÖ´Ù. --------------------------------------------------------------------- 4.5 Á¦3´Ü°è: ÂüÁ¶ pa¿Í ppa¸¦ Á¦2´Ü°è¸¦ ÅëÇÏ¿© ÃʱâÈ­¸¦ ½ÃÅ°¸é ¾Æ·¡ÀÇ [Ç¥ 2]¿¡ ³ª¿À ´Â ¼¼ ºÎ·ùÀÇ µ¿µîÇÑ(equivalent) ¼ö½ÄµéÀÌ »ý°Ü³­´Ù. [Ç¥ 2]ÀÇ ¿ìÃø ¿­Àº °¢°¢ °¡¿îµ¥ ¿­°ú µ¿µîÇϱâ´Â ÇÏÁö¸¸ ´Ù¼Ò ¾ïÁö»ý¶¼¸¦ ¾´ °ÍÀÌ´Ù. ¿ìÃø ¿­ ÀÌ ¿Ö °¡¿îµ¥ ¿­°ú µ¿µîÇÑÁö ±× ÀÌÀ¯¸¦ °õ°õÈ÷ µûÁ® º¸±â ¹Ù¶õ´Ù. [Ç¥ 2] ¼¼ ºÎ·ùÀÇ µ¿µîÇÑ ¼ö½Ä --------------------+---------------------+------------2-------------- TÇü º¯¼ö | a *pa **ppa | *&a **&pa µîµî --------------------+---------------------+-------------------------- TÇü Æ÷ÀÎÅÍ | &a pa *ppa | &*pa &**ppa *&pa µîµî --------------------+---------------------+-------------------------- TÇü Æ÷ÀÎÅÍÀÇ Æ÷ÀÎÅÍ | &pa ppa | &*ppa &*&pa µîµî --------------------+---------------------+-------------------------- [Ç¥ 2]¿¡¼­ °¡Àå ÁÖ¸ñÇÒ °ÍÀº **ppa¿Í a°¡ ¿ÏÀüÈ÷ µ¿µîÇÏ´Ù´Â Á¡ÀÌ´Ù. 2 µû¶ó¼­ ¾ðÁ¦ ¾îµð¼­³ª **ppa´Â a ´ë½Å¿¡ ¾µ ¼ö ÀÖ´Ù. ¹°·Ð pa¿Í ppa°¡ ´Ù ¸¥ °ªÀ¸·Î º¯°æµÇ±â Àü±îÁö¸¸ ±×·¸´Ù´Â ¾ê±â´Ù. <¿¹Á¦ 5> Æ÷ÀÎÅÍÀÇ Æ÷ÀÎÅÍ¿¡ ÀÇÇÑ ÂüÁ¶ --------------------------------------------------------------------- #define printexpri(expr) printf("%-5s == %4d\n", #expr, expr) #define printexprp(expr) printf("%-5s == %4p\n", #expr, expr) | void main(void) +-- Àü󸮱⠿¬»êÀÚ { 2 ¹®ÀÚ¿­ »ó¼ö·Î ¸¸µç´Ù. char a, *pa, **ppa; a = 3; pa = &a; ppa = &pa; printexpri(a); printexpri(*pa); printexpri(**ppa); printexprp(&a); printexprp(pa); printexprp(*ppa); printexprp(&pa); printexprp(ppa); } --------------------------------------------------------------------- ½ÇÇà °á°ú(Àý´ë ¹øÁö°ªÀº »óȲ¿¡ µû¶ó ´Þ¶óÁú ¼ö ÀÖÀ½) a == 3 -+ *pa == 3 +- ¼­·Î µ¿µîÇÏ´Ù. **ppa == 3 -+ &2a == FFDD -+ pa == FFDD +- ¼­·Î µ¿µîÇÏ´Ù. *ppa == FFDD -+ &pa == FFDE -+- ¼­·Î µ¿µîÇÏ´Ù. ppa == FFDE -+ --------------------------------------------------------------------- 4.6 ÀÏÂ÷¿ø Æ÷ÀÎÅÍ ¹è¿­ÀÇ Æ÷ÀÎÅÍ Æ÷ÀÎÅÍ ¹è¿­ÀÇ Æ÷ÀÎÅͶó´Â °ÍÀº ±× Æ÷ÀÎÅÍÀÇ ´ë»óü°¡ Æ÷ÀÎÅÍ ¹è¿­ÀÌ ¶ó´Â ¶æÀÌ´Ù. ±×·¯¸é ÀÌÁ¦ Æ÷ÀÎÅÍ ¹è¿­ÀÇ Æ÷ÀÎÅ͸¦ »ç¿ëÇÏ´Â ¹æ¹ýÀ» ´Ã ÇØ ¿Ô´ø ´ë·Î 3´Ü°è¿¡ °ÉÃļ­ ¾Ë¾Æº¸µµ·Ï ÇÏÀÚ. 4.6.1 Á¦1´Ü°è: Æ÷ÀÎÅÍ ¹è¿­ÀÇ Æ÷ÀÎÅÍ pps¸¦ Á¤ÀÇ ¿ì¼± ¾Æ·¡¿Í °°ÀÌ 2¹è¿­Å©±â°¡ MAXÀÌ°í ¹è¿­¿ä¼Ò°¡ TÇü Æ÷ÀÎÅÍÀÎ ÀÏÂ÷ ¿ø Æ÷ÀÎÅÍ ¹è¿­ ps¸¦ ¸Ó¸´¼Ó¿¡ ±×·ÁµÐ´Ù. T *ps[MAX] ±× ´ÙÀ½¿¡ Á¦1÷ÀÚÅ©±â¸¦ ¸Ó¸´¼Ó¿¡¼­ »èÁ¦Çϴµ¥, ¿©±â¼­ ps´Â ÀÏÂ÷¿ø ¹è¿­À̹ǷΠMAX°¡ ÀÌ¿¡ ÇØ´çµÈ´Ù. T *ps[] ±×¸®°í ³ª¼­ ps[]¸¦ (*pps)·Î ´ëÄ¡ÇÏ¿© ¼±¾ð¹®¿¡ ½ÇÁ¦·Î ½á³Ö´Â´Ù. T *(*pps); ÀÌÁ¦ ppsÀÇ Á¤ÀÇ°¡ ³¡³­ ¼ÀÀÌ´Ù. ±×·±µ¥ ¿©±â¼­ ±¸µÎÁ¡ÀÎ °ýÈ£ ( )¸¦ »ý·«Çصµ ±× ¿ì¼±¼øÀ§¿¡´Â º¯µ¿ÀÌ ¾øÀ¸¹Ç·Î °á±¹ ¾Æ·¡¿Í °°ÀÌ µÈ´Ù. +----------+ | T **pps; | 2+----------+ ¿©±â¼­ ¿ì¸®´Â ÇÑ °¡Áö Áß¿äÇÑ »ç½ÇÀ» ¹ß°ßÇÒ ¼ö ÀÖ´Ù. ±×°ÍÀº ppsÀÇ Á¤ÀÇ°¡ ¾Õ¿¡¼­ ¼³¸íÇÑ Æ÷ÀÎÅÍ º¯¼öÀÇ Æ÷ÀÎÅÍ ppaÀÇ Á¤ÀÇ¿Í ¿ÏÀüÈ÷ µ¿ÀÏÇÏ ´Ù(identical)´Â Á¡ÀÌ´Ù. ±× ÀÌÀ¯´Â ´ÙÀ½°ú °°ÀÌ Çؼ®ÇÒ ¼ö ÀÖ´Ù. ¿ø·¡ "PÇü ¹è¿­ s¸¦ °¡¸®Å°´Â ÀÏÂ÷¿ø ¹è¿­ Æ÷ÀÎÅÍ ps"¿Í ´Ü¼øÇÑ "PÇü Æ÷ÀÎÅÍ pa"ÀÇ Á¤ÀÇ Çü½ÄÀº ¾Æ·¡¿Í °°ÀÌ ¿ÏÀüÈ÷ µ¿ÀÏÇÏ´Ù. ´ÜÁö ÃʱâÈ­ ¹æ ¹ýÀÌ ´Ù¸¦ »ÓÀÌ´Ù. Á¤ÀÇ ÃʱâÈ­ P s[MAX], *ps; ps = s; <--- ÀÏÂ÷¿ø ¹è¿­ Æ÷ÀÎÅÍ P a, *pa; | 2pa = &a; <--- ´Ü¼øÇÑ Æ÷ÀÎÅÍ | | +----+------------- Á¤ÀÇ ÇüÅ°¡ °°´Ù. ±×·±µ¥ P´Â »ê¼úÇü»Ó¸¸ ¾Æ´Ï¶ó ÀÓÀÇÀÇ µ¥ÀÌÅÍÇüÀÏ ¼ö ÀÖÀ¸¹Ç·Î, P¸¦ (T *)·Î ´ëÄ¡Çصµ ¾Æ¹«·± ¹®Á¦°¡ ¾ø´Ù. Á¤ÀÇ ÃʱâÈ­ T *ps[MAX], **pps; pps = ps; T a, *pa, **ppa;| pa = &a; ppa = &pa; | | +---+------------ Á¤ÀÇ ÇüÅ°¡ °°´Ù. °á°úÀûÀ¸·Î ppa¿Í pps´Â ±× Á¤ÀÇ Çü½ÄÀÌ ¿ÏÀüÈ÷ µ¿ÀÏÇÏ´Ù. ´ÜÁö ±×°Í À» ÇÁ·Î±×·¡2¸Ó°¡ Æ÷ÀÎÅÍ º¯¼öÀÇ Æ÷ÀÎÅÍ·Î »ç¿ëÇÏ´À³Ä, ¾Æ´Ï¸é +, -, ++, - - µîÀÇ ¿¬»êÀÚ¸¦ ¾¸À¸·Î½á Æ÷ÀÎÅÍ ¹è¿­ÀÇ Æ÷ÀÎÅÍ·Î »ç¿ëÇÏ´À³Ä¿¡ µû¶ó ±× Àǹ̰¡ ´Þ¶óÁú »ÓÀÌ´Ù. 4.6.2 Á¦2´Ü°è: Æ÷ÀÎÅÍ ¹è¿­ÀÇ Æ÷ÀÎÅÍ pps¸¦ ÃʱâÈ­ pps´Â Æ÷ÀÎÅÍ ¹è¿­ÀÇ Æ÷ÀÎÅÍÀ̹ǷΠpps¿¡ ´ëÀÔÇÒ ¼ö ÀÖ´Â °ÍÀº ±× Æ÷ ÀÎÅÍ ¹è¿­ÀÇ ¼±µÎ¸¦ °¡¸®Å°´Â Æ÷ÀÎÅÍÀÌ´Ù. Æ÷ÀÎÅÍ ¹è¿­ÀÇ ¼±µÎ¸¦ °¡¸®Å°´Â Æ÷ÀÎÅÍ´Â [Ç¥ 3]¿¡¼­µµ ¾Ë ¼ö ÀÖµíÀÌ ¹è¿­¸í ps³ª &ps[0]¿¡ ÀÇÇؼ­ ¾òÀ» ¼ö ÀÖ´Ù. ¹è¿­¸í ps¸¦ pps¿¡ ´ëÀÔÇÒ ¼ö ÀÖ´Â ÀÌÀ¯´Â Áö³­ ´Þ¿¡ ¹è¿î "Æ÷2ÀÎÅÍ »ý¼º¿¡ °üÇÑ Á¤ÀÇ I" ¶§¹®ÀÌ´Ù. [Ç¥ 3] ppsÀÇ ÃʱâÈ­ ¹æ¹ý --------------------------------------------------------------------- ¿Ã¹Ù¸¥ ÃʱâÈ­ Ʋ¸° ÃʱâÈ­ °æ°í ¸Þ½ÃÁö --------------------------------------------------------------------- pps = ps; pps = &ps; "Suspicious pointer conversion" pps = &ps[0]; pps = *ps; "Suspicious pointer conversion" *pps = *ps; "Possible use of 'pps' before definition" pps = &*ps[0]; "Suspicious pointer 2conversion" --------------------------------------------------------------------- °¢Á¾ Á¤ÀÇ¿¡ ÀÔ°¢ÇÏ¿© pps = ps¶ó´Â ´ëÀÔ½ÄÀÌ ¿Ö Àû¹ýÇÑÁö¿¡ ´ëÇÏ¿© µûÁö´Â ÀÛ¾÷Àº 11.2.3Àý¿¡¼­ À¯ÃßÇغ¸±â ¹Ù¶ó¸ç ¿©±â¼­´Â »ý·«ÇÏ°Ú´Ù. 4.6.3 Á¦3´Ü°è: pps¿¡ ÀÇÇÑ Æ÷ÀÎÅÍ ¹è¿­ psÀÇ ÂüÁ¶ pps¿¡ ÀÇÇÏ¿© ps¸¦ ÂüÁ¶ÇÏ´Â ÀÏÀº ¸Å¿ì °£´ÜÇÏ´Ù. ¿©Áö²¯ ´©Â÷ ¾ð±ÞÇÑ ¹Ù¿Í °°ÀÌ pps¸¦ ±×Àú ps ¾²µíÀÌ ÇÏ¸é µÈ´Ù. ´õ ÀÌ»ó ½±°Ô Ç®¾î¼­ ¾ê±âÇØ ºÃÀÚ ¼ö´Ù ¶°´Â ÀÏ ¹Û¿¡ ¾È µÉ °°¾Æ¼­ À̸¸ ÁÙÀÌ°Ú´Ù. ´Ù¸¸ pps¿¡´Â ++³ª --2 ¿¬»êÀÚ¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù´Â Á¡À» ÀØÁö ¸»¾ÒÀ¸¸é ÇÑ´Ù. <¿¹Á¦ 6> pps¿¡ ÀÇÇÑ Æ÷ÀÎÅÍ ¹è¿­ psÀÇ ÂüÁ¶ --------------------------------------------------------------------- void main(void) +----- Æ÷ÀÎÅÍ ¹è¿­ÀÇ Æ÷ÀÎÅ͸¦ Á¤ÀÇ { | char *ps[3], **pps; int i; | +--- Æ÷ÀÎÅÍ ¹è¿­ÀÇ Á¤ÀÇ pps = ps; <--- ppsÀÇ ÃʱâÈ­ pps[0] = "Breakfast\n"; -+ pps[1] = "Lunch\n"; | pps¿¡ ÀÇÇÑ ps ÂüÁ¶ pps[2] = "Supper\n"; -+ for (i = 0; i <2 3; i++) printf(pps[i]); } +---±×Àú ps ¾²µíÀÌ ¾²¸é µÈ´Ù. --------------------------------------------------------------------- ½ÇÇà °á°ú Breakfast Lunch Supper --------------------------------------------------------------------- [±×¸² 6] pps¿Í psÀÇ °ü°è °³³äµµ --------------------------------------------------------------------- Æ÷ÀÎÅÍ ¹è¿­ÀÇ Æ÷ÀÎÅÍ pps +-------+ ±æÀÌ°¡ ÀÏÁ¤Ä¡ ¾ÊÀº | o | 2 ¹®ÀÚ¿­ »ó¼öµé +---+---+ Æ÷ÀÎÅÍ ¹è¿­ +---------------+ | ps +------------>| Breakfast\n\0 | | pps[0] +-------+ | +---------------+ +---------->[0]| o --+-----+ +-----------+ | pps[1] +-------+ +---------->| Lunch\n\0 | +---------->[1]| o --+-------+ +-----------+ | pps[2] +-------+ +------------+ +----------2>[2]| o --+------------------>| Supper\n\0 | +-------+ +------------+ --------------------------------------------------------------------- 4.7 ´ÙÂ÷¿ø Æ÷ÀÎÅÍ ¹è¿­ÀÇ Æ÷ÀÎÅÍ ´ÙÂ÷¿ø Æ÷ÀÎÅÍ ¹è¿­ÀÇ Æ÷ÀÎÅÍ´Â °ÅÀÇ »ç¿ëµÇ°í ÀÖÁö ¾ÊÁö¸¸, ±×·¡µµ Ȥ½Ã ¹®ÀÚ¿­ÀÇ ÀÌÂ÷¿ø ¹è¿­À» ±¸ÇöÇÒ ÇÊ¿ä°¡ ÀÖ´Â µ¶ÀÚ¸¦ À§ÇÏ¿© ¿©±â¼­ °£·«ÇÏ°Ô ÀÌÂ÷¿ø Æ÷ÀÎÅÍ ¹è¿­ÀÇ Æ÷ÀÎÅ͸¦ Á¤ÀÇÇÏ´Â ¹æ¹ý¸¸ ¾Ë¾Æº¸ÀÚ. --------------------------------------------------------------2------- [1] ¸ÕÀú ÀÌÂ÷¿ø Æ÷ÀÎÅÍ ¹è¿­ pss¸¦ ¸Ó¸´¼Ó¿¡ ±×·ÁµÐ´Ù. ¿©±â¼­ size1°ú s ize2´Â ¹°·Ð »ó¼ö¼ö½ÄÀ̾î¾ß ÇÑ´Ù. T *pss[size1][size2] [2] ±×¸®°í ³ª¼­ ÃÖ»óÀ§ ºÎºÐ¹è¿­ÀÇ Å©±â(Á¦1÷ÀÚÅ©±â == size1)¸¦ »èÁ¦ÇÑ ´Ù. ¸¸¾à¿¡ ÇÔ¼öÀÇ ¸Å°³º¯¼ö ¸®½ºÆ®¿¡´Ù°¡ ¼±¾ðÇÏ´Â °æ¿ì¿¡´Â ´ÙÀ½ [4 ]¹øÀ¸·Î ±×³É °Ç³Ê ¶Û ¼ö ÀÖ´Ù. ±×·¸Áö ¾Ê´Ù¸é ¹Ýµå½Ã [3]¹øÀ» °æÀ¯ÇØ ¾ß ÇÑ´Ù. T *pss[][size2] [3] pss[]¸¦ (*ppss)·Î ´ëÄ¡ÇÑ´Ù. +-------------------+ | T *(*ppss)[size2] | +-2------------------+ ¿©±â¼­ °ýÈ£ ( )´Â Àý´ë·Î »ý·«ÇÏ¸é ¾È µÈ´Ù. ¸¸¾à **ppss[size2]ó·³ °ýÈ£¸¦ »ý·«ÇØ ¹ö¸®¸é ±¸µÎÁ¡ÀÇ ¿ì¼±¼øÀ§¿¡ µû¶ó **(ppss[size2])·Î ÀνĵǾî, ¿ø·¡ ÀǵµÇÑ "ÀÌÂ÷¿ø Æ÷ÀÎÅÍ ¹è¿­ÀÇ Æ÷ÀÎÅÍ"°¡ ¾Æ´Ñ ¾û¶×ÇÑ "ÀÏÂ÷¿ø Æ÷ÀÎÅÍÀÇ Æ÷ÀÎÅÍ ¹è¿­"À» Á¤ÀÇÇÏ°Ô µÈ´Ù?!?? [4] ¼±¾ðºÎ¿¡ Á÷Á¢ ±â¼úÇÑ´Ù. T *(*ppss)[size2], *pss[size1][size2]; [5] ÃʱâÈ­´Â ¾Æ·¡¿Í °°ÀÌ ÇÏ¸é µÈ´Ù. ¹°·Ð ÀÌÂ÷¿ø Æ÷ÀÎÅÍ ¹è¿­ pssÀÇ ¸ð µç ¹è¿­¿ä¼Òµµ ÀÏÀÏÀÌ ÇÔ²²ÃʱâÈ­ÇØ ÁÖ¾î¾ß ÇÏÁö¸¸ 2¼³¸íÀÇ Áߺ¹À» ÇÇ Çϱâ À§ÇØ ¿©±â¼­´Â »ý·«Çß´Ù. ppss = pss; [6] ÀÌÁ¦ ppss¸¦ ±×Àú pss ¾²µíÀÌ ÇÏ¸é µÈ´Ù. ppss°¡ pss¿Í ´Ù¸¥ Á¡ÀÌ ÀÖ ´Ù¸é º¯¼öÀÇ ÀÏÁ¾À̹ǷΠ++³ª -- ¿¬»êÀÚ¸¦ ¾µ ¼ö ÀÖ´Ù´Â Á¡ÀÌ´Ù. --------------------------------------------------------------------- ´ÙÂ÷¿ø Æ÷ÀÎÅÍ ¹è¿­ÀÇ Æ÷ÀÎÅ͸¦ »ç¿ëÇÑ ¿¹´Â ´ÙÀ½ÀÇ <¿¹Á¦ 7>À» Âü°í Çϱ⠹ٶõ´Ù. ´ÙÀ½ ±Û·Î °è¼Ó À̾îÁý´Ï´Ù. turbo28 Åͺ¸ÀÌ»¡ ÀÓ ÀÎ °Ç #41 ÀÓÀ롂 (turbo28 ) [°­ÁÂ] CÆ÷ÀÎÅÍ4-5: Æ÷ÀÎÅÍ ¹è¿­(¸¶Áö¸·È¸) 03/06 01:13 319 line --------------------------------------------------------------------- 5 ¸Å°³º¯¼ö°¡ Æ÷ÀÎÅÍ ¹è¿­ÀÎ ÇÔ¼ö --------------------------------------------------------------------- ¸Å°³º¯¼ö°¡ Æ÷ÀÎÅÍ ¹è¿­ÀÎ ÇÔ¼ö¸¦ ¸¸µå´Â ¹æ¹ýÀº ÀÌ ±Û ¾ÕºÎºÐ¿¡ ÀÖ´Â ¸Å°³º¯¼ö°¡ ´ÙÂ÷¿ø ¹è¿­ÀÎ ÇÔ¼ö¸¦ ¸¸µå´Â ¹æ¹ý¿¡ ÁØÇÑ´Ù. ´Ù¸¸ Çü½Ä¸Å°³º¯ ¼ö·Î¼­ Æ÷ÀÎÅÍÀÇ Æ÷ÀÎÅ͸¦ ¼±¾ðÇÏ´Â ¹æ¹ý¸¸ °£´ÜÇÏ°Ô ¿©±â¼­ ¾ð±ÞÇÏ°íÀÚ ÇÑ´Ù. Æ÷ÀÎÅÍÀÇ Æ÷ÀÎÅÍ´Â ¾Æ·¡¿Í °°ÀÌ ¼±¾ðÇÑ´Ù. +---------+ +-----------+ | T **pps2 | ¶Ç´Â | T *(*pps) | +---------+ +-----------+ ±×·±µ¥ ÀÏÀü¿¡ ¾ð±ÞÇßµíÀÌ ÇÔ¼öÀÇ ¸Å°³º¯¼ö ¸®½ºÆ® ³»¿¡¼­¸¸Àº "(*Æ÷ ÀÎÅ͸í)"°ú "Æ÷ÀÎÅ͸í[]"ÀÌ ¿ÏÀüÈ÷ µ¿ÀÏÇÏ´Ù°í Çß´Ù. µû¶ó¼­ ¾Æ·¡¿Í °°ÀÌ (*pps)¸¦ pps[]·Î ¹Ù²ãÄ¡±âÇصµ µÈ´Ù. +----------+ | T *pps[] | +----------+ ±×¸®°í ¸¸¾à¿¡ ÀÌÂ÷¿ø Æ÷ÀÎÅÍ ¹è¿­ÀÇ Æ÷ÀÎÅÍ ppss¶ó¸é ¾Æ·¡ÀÇ µÎ°¡Áö Áß¿¡¼­ ¸¶À½¿¡ µå´Â °É·Î °ñ¶ó »ç¿ëÇÏ¸é µÇ´Âµ¥, ÀÌÇØÇϱⰡ ½¬¿î µÎ¹ø° °ÍÀ» ±ÇÇÏ°í ½Í´Ù. ¾Æ·¡ ù¹ø°¸¦ »ç¿ëÇÒ ¶§ °ýÈ£2 ( )´Â Àý´ë·Î »ý·«ÇÒ ¼ö ¾ø´Ù´Â »ç½Ç¿¡ ÁÖÀÇÇϱ⠹ٶõ´Ù. ¶ÇÇÑ size2´Â ¹Ýµå½Ã »ó¼ö¼ö½ÄÀ̾î¾ß ÇÏ ¸ç »ý·«ÇÒ ¼ö ¾ø´Ù. +-------------------+ +------------------+ | T *(*ppss)[size2] | | T *ppss[][size2] | +-------------------+ +------------------+ <¿¹Á¦ 7> ¸Å°³º¯¼ö°¡ Æ÷ÀÎÅÍ ¹è¿­ÀÎ ÇÔ¼öÀÇ »ç¿ë ¿¹ --------------------------------------------------------------------- void printmenu(char *pps[], unsigned n); void printmultimenu(char *ppss[][2], unsigned n); void ma2in(void) { +----------------------------- ÀÏÂ÷¿ø Æ÷ÀÎÅÍ ¹è¿­ char *ps[3], *pss[3][2]; +--------------------- ÀÌÂ÷¿ø Æ÷ÀÎÅÍ ¹è¿­ ps[0] = "Breakfast"; -+ ps[1] = "Lunch"; | psÀÇ ÃʱâÈ­ ps[2] = "Supper"; -+ pss[0][0] = "Bread"; -+ pss[0][1] = "Milk"; | | pss[1][0] = "Ramyun"; | pss[1][1] = "Kkagdugi"; | pssÀÇ ÃʱâÈ­ | pss[2][0] = "Rice"; | 2 pss[2][1] = "Kimchi"; -+ +-------------- ¹è¿­¸íÀ» ÁöÁ¤ÇÑ´Ù. printmenu(ps, 3);¦¢ printmultimenu(pss, 3); } +----- ¸Å°³º¯¼ö°¡ ÀÏÂ÷¿ø Æ÷ÀÎÅÍ ¹è¿­ÀÎ ÇÔ¼ö | void printmenu(char *pps[], unsigned n) { int i; for (i = 0; i < n; i++) printf("%-16s", pps[i]); printf("\n------------------------------------------\n"); } +----- ¸Å°³º¯¼ö°¡ ÀÌÂ÷¿ø Æ÷ÀÎÅÍ ¹è¿­ÀÎ ÇÔ¼ö | void printmultimenu(char *ppss[][2], unsigned n) { 2 | int i; +----- »ý·«ÇÒ ¼ö ¾ø´Ù. for (i = 0; i < n; i++) printf("%-16s", ppss[i][0]); printf("\n"); for (i = 0; i < n; i++) printf("%-16s", ppss[i][1]); printf("\n"); } --------------------------------------------------------------------- ½ÇÇà °á°ú Breakfast Lunch Supper ------------------------------------------ Bread Ramyun Rice Milk Kkagdugi Kimchi --2------------------------------------------------------------------- Æ÷ÀÎÅÍÀÇ Æ÷ÀÎÅÍ¿¡ °üÇÑ ¼³¸íÀº ÀÌ°ÍÀ¸·Î½á ¸¶Ä£´Ù. ¿À´ÃÀº À̸¸ Ã¥À» µ¤°í ÀÌ ´ÙÀ½ ¹ø¿¡ ³ª¸ÓÁö ºÎºÐÀ» °è¼Ó Àо°¡±â ¹Ù¶õ´Ù. --------------------------------------------------------------------- 6 ¹®ÀÚ¿­ »ó¼ö¿¡ ÀÇÇÑ ¹è¿­ÀÇ ÃʱâÈ­ --------------------------------------------------------------------- 6.1 ¹®ÀÚ¿­ »ó¼ö¿¡ ÀÇÇÑ ¹®ÀÚ ¹è¿­ÀÇ ÃʱâÈ­ ´ëÀÔ½Ä µîµîÀ» ¾²Áö ¾Ê°í ¼±¾ð¹®¿¡¼­ Á÷Á¢ ¹è¿­À» ÃʱâÈ­ÇÏ´Â 2¹æ¹ý¿¡ ´Â ¿©·¯ °¡Áö°¡ ÀÖÁö¸¸, ¹®ÀÚ ¹è¿­ÀÇ °æ¿ì¿¡´Â ÃʱâÈ­ÇÏ´Â ¹æ¹ýÀÌ ÇÑ °¡Áö ´õ ÀÖ´Ù. ÀÌ ¹æ¹ýÀº ´ë´ÜÈ÷ °£´ÜÇÏ°í ¶ÇÇÑ Æí¸®Çϱâ À̸¦ µ¥ ¾ø´Â ¹æ¹ýÀÎ µ¥, ¹Ù·Î ¹®ÀÚ¿­ »ó¼ö·Î Á÷Á¢ ¹®ÀÚ ¹è¿­À» ÃʱâÈ­ÇÏ´Â °ÍÀÌ´Ù. ¹®ÀÚ¿­ »ó¼ö´Â ÀÏÂ÷¿ø ¹®ÀÚ ¹è¿­°ú ¿ÏÀüÈ÷ µ¿µîÇÏ´Ù´Â »ç½ÇÀº ÁöÁö³­ ´Þ¿¡¼­ ÀÌ¹Ì ¾ð±ÞÇß¾ú´Ù. ±×·¯¹Ç·Î ÀÏÂ÷¿ø ¹®ÀÚ ¹è¿­°ú °°Àº ³»ºÎ ±¸Á¶¸¦ °¡Áö´Â ¹®ÀÚ¿­ »ó¼ö¸¦ ÀÌ¿ëÇÏ¿© ´ÙÂ÷¿ø ¹®ÀÚ ¹è¿­ÀÇ ÃÖÇÏÀ§ ºÎºÐ¹è¿­(1Â÷ ¿ø)À» ÃʱâÈ­ÇÏ´Â °ÍÀº ¹®¹ý»óÀ̳ª ³í¸®»óÀ¸·Îµµ ÀüÇô ÇÏÀÚ°¡ ¾ø´Ù. ¿¹¸¦2 µé¾î ¾Æ·¡ÀÇ 5°¡Áö ÃʱâÈ­ ¹æ¹ýÀº ¿ÏÀüÈ÷ µ¿ÀÏÇÏ´Ù. ¹®ÀÚ¿­Àº Ç× »ó '\0'À¸·Î ³¡³­´Ù´Â »ç½Ç¿¡ ÁÖÀÇÇÏ¿©¾ß ÇÑ´Ù. Áï ¹®ÀÚ ¹è¿­ÀÇ Å©±â´Â ³Î Á¾·á¹®ÀÚ¸¦ ÀúÀåÇϱâ À§ÇÏ¿© (¹®ÀÚ¿­ÀÇ ½ÇÁ¦ ±æÀÌ + 1)ÀÇ °ªÀ» °¡Á®¾ß ÇÑ ´Ù´Â ¶æÀÌ´Ù. ÀÌ·± Àú·± »ý°¢ÇϱⰡ Á¤ ±ÍÂúÀ¸¸é ¾Æ¿¹ ¹è¿­Å©±â¸¦ »ý·«ÇØ ¹ö¸®¸é µÉ °ÍÀÌ´Ù. char s[] = {'W', 'a', 't', 'e', 'r', 'm', 'e', 'l', 'o', 'n', '\0'}; char s[11] = {'W', 'a', 't', 'e', 'r', 'm', 'e', 'l', 'o', 'n', '\0'}; char s[11] = {'W', 'a', 't', 'e', 'r', 'm', 'e', 'l', 'o'2, 'n', }; char s[] = "Watermelon"; <--- Á¦ÀÏ ¼Ó ÆíÇÑ ¹æ¹ý | char s[11] = "Watermelon"; ¿©ºÐÀÇ ½°Ç¥ ¹®ÀÚ ¹è¿­ s +---+---+---+---+---+---+---+---+---+---+---+ | W | a | t | e | r | m | e | l | o | n | \0| +---+---+---+---+---+---+---+---+---+---+---+ [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] À§¿¡ ³ª¿­ÇÑ 5°¡Áö ÃʱâÈ­ ¹æ¹ý Áß¿¡¼­ ¾î´À °ÍÀÌ °¡Àå °£°áÇØ º¸ÀÌ´Â °¡? ³¯¾¾¿Í ±âÈ£¿¡ µû¶ó¼­ ´Ù¼Ò ´Ù¸£°ÚÁö¸¸ ´2« µü °¨°í »ý°¢Çغ¸¸é ´Ü¿¬ ³×¹ø°°¡ ¹°¸Á¿¡ ¿À¸¦ °ÍÀÌ´Ù. ÀÌÂ÷¿ø ¹®ÀÚ ¹è¿­ÀÇ °æ¿ìµµ ÀÌ¿Í ¸¶Âù°¡ÁöÀÌ´Ù. <±×¸² 7a>ÀÇ 4°¡Áö´Â ¸ðµÎ µ¿ÀÏÇÑ ÃʱâÈ­ ¹æ¹ýÀÌ´Ù. Á¦1÷ÀÚÅ©±â(ÇàÀÇ °¹¼ö)´Â ÆíÀÇ»ó »ý·«ÇßÀ¸ ¸ç, ¸Ç³¡ÀÇ ¿©ºÐÀÇ ½°Ç¥´Â ÂïÀ¸³ª ¸¶³ªÁö¸¸ ±×·¡µµ Âï´Â °Ô º¸±â ÁÁ´Ù. <±×¸² 7a> ÀÌÂ÷¿ø ¹®ÀÚ ¹è¿­ softdrinkÀÇ ¿©·¯ °¡Áö ÃʱâÈ­ ¹æ¹ý --------------------------------------------------------------------- +----- »ý·«ÇÏ¸é ¾È µÈ´Ù. | +---------------2+ char softdrink[][6] = { | | {'C', 'o', 'l', 'a', '\0', }, | {'F', 'a', 'n', 't', 'a', '\0'}, | {'C', 'i', 'd', 'e', 'r', '\0'}, | }; ¦¢ | +---------------------+ char softdrink[][6] = {| | ¿©ºÐÀÇ ½°Ç¥ {'C', 'o', 'l', 'a', }, | {'F', 'a', 'n', 't', 'a', }, | {'C', 'i', 'd', 'e', 'r', }, | }; 2 | | | +--+-------------+ char softdrink[][6] = { 'C', 'o', 'l', 'a', '\0', '\0', 'F', 'a', 'n', 't', 'a', '\0', 'C', 'i', 'd', 'e', 'r', '\0'}; char softdrink[][6] = {"Cola", "Fanta", "Cider"}; --------------------------------------------------------------------- <±×¸² 7b> softdrink°¡ ÃʱâÈ­ µÈ Á÷ÈÄÀÇ »óȲ --------------------------------------------------------------------- [0] [1] [2] [3] [4] [5] 2 +---+---+---+---+---+---+ softdrink[0]| C | o | l | a | \0| \0| +---+---+---+---+---+---+ softdrink[1]| F | a | n | t | a | \0| +---+---+---+---+---+---+ softdrink[2]| C | i | d | e | r | \0| +---+---+---+---+---+---+ --------------------------------------------------------------------- À§ÀÇ ¿¹¿¡¼­µµ ¾Ë ¼ö ÀÖµíÀÌ ¹®ÀÚ¿­ »ó¼ö·Î ¹®ÀÚ ¹è¿­À» ÃʱâÈ­ÇÏ´Â °æ¿ì¿¡µµ ¹è¿­ÀÇ ÃʱâÈ­ ±ÔÄ¢ÀÌ ±×´ë·Î Àû¿ëµÈ´Ù. Áï ¹è¿­Å©±â(´ÙÂ÷¿ø 2¹® ÀÚ ¹è¿­À̶ó¸é ¸¶Áö¸· ÷ÀÚÅ©±â)¸¦ ÁöÁ¤ÇßÀ» ¶§, ¹®ÀÚ¿­ÀÇ ½ÇÁ¦ ±æÀÌ(³Î Á¾·á¹®ÀÚ´Â Á¦¿Ü)°¡ ¹è¿­Å©±âº¸´Ù ´õ Å©¸é ¿¡·¯°¡ ¹ß»ýÇÏ°í, ÀÛÀ¸¸é ±× ³² ´Â ¹è¿­¿ä¼Ò¸¦ ¸ðµÎ 0À¸·Î, Áï ³Î Á¾·á¹®ÀÚ '\0'À¸·Î ä¿î´Ù´Â °ÍÀÌ´Ù. Ư º°È÷ À§¿¡¼­ sofrdrink[0]¸¦ ÁÖ¸ñÇϱ⠹ٶõ´Ù. ±× ¹ÛÀÇ ¹®ÀÚ¿­ »ó¼ö¿¡ ÀÇÇÑ ÃʱâÈ­ ±ÔÄ¢¿¡´Â ¼¼¼¼ÇÑ »çÇ×ÀÌ ¸î¸î ÀÖ Áö¸¸ ±¸Â÷Çؼ­ »ý·«ÇÏ°Ú´Ù. ´ë½Å [±×¸² 8]¿¡ ±× ½Ç·Ê¸¦ µé¾î ³õ¾ÒÀ¸´Ï Âü °íÇϱ⠹ٶõ´Ù. [±×¸² 8] ¹®ÀÚ¿­ »ó¼öÀÇ ±æÀÌ¿¡ µû¸¥ ¹®ÀÚ ¹è¿­ÀÇ ³»¿ë ---------------------2------------------------------------------------ char s[4] = "AB"; s +---+---+---+---+ | A | B | \0| \0| +---+---+---+---+ char s[4] = "ABC"; s +---+---+---+---+ | A | B | C | \0| <--- ¹Ù¶÷Á÷ÇÑ ¹æ¹ý +---+---+---+---+ char s[4] = "ABCD"; s +---+---+---+---+ | A | B | C2 | D | <--- ³Î Á¾·á¹®ÀÚ°¡ ¾øÀ¸¹Ç·Î +---+---+---+---+ ¿ÏÀüÇÑ ¹®ÀÚ¿­ÀÌ ¾Æ´Ï´Ù. char s[4] = "ABCDE"; "Too many initializers" ¿¡·¯°¡ ¹ß»ýÇÑ´Ù. char s[] = "ABC"; s +---+---+---+---+ | A | B | C | \0| <--- °¡Àå ¹Ù¶÷Á÷ÇÑ ¹æ¹ý +---+---+---+---+ char ss[][4] = {"A", "BC"}; +---+---+---+---+ | A | \0| \0| \0| ss +---+---+---+-2--+ | B | C | \0| \0| +---+---+---+---+ char ss[][4] = {"ABCD", "EFGH"}; +---+---+---+---+ | A | B | C | D | ss +---+---+---+---+ | E | F | G | H | +---+---+---+---+ --------------------------------------------------------------------- [±×¸² 8]¿¡¼­ char s[4] = "ABCD"³ª char ss[][4] = {"ABCD", "EFGH"} ¿Í °°2Àº ¼±¾ð¹®¿¡´Â ÁÖÀÇÇÒ ÇÊ¿ä°¡ ÀÖ´Ù. ÀÌ °æ¿ì ³Î Á¾·á¹®ÀÚ°¡ ¹è¿­ sÀÇ ³¡¿¡ ÀúÀåµÇÁö ¾ÊÀ¸¹Ç·Î ±× ¹è¿­ s´Â ºÒ¿ÏÀüÇÑ ¹®ÀÚ¿­ÀÌ µÈ´Ù. µû¶ó¼­ pri ntf ÇÔ¼ö %s ¼­½ÄÀ¸·Î ÀÌ·± ºÒ¿ÏÀüÇÑ ¹®ÀÚ¿­À» °¡Áø ¹è¿­ s¸¦ Àý´ë·Î Ãâ·Â Çؼ­´Â ¾È µÈ´Ù. 6.2 ¹®ÀÚ ¹è¿­°ú Æ÷ÀÎÅÍ ¹è¿­ÀÇ ÃʱâÈ­ ±¸º° ¹®ÀÚ ¹è¿­À» ÃʱâÈ­ÇÏ´Ù º¸¸é ÀÚÄ© ÀÌ°ÍÀ» Æ÷ÀÎÅÍ ¹è¿­ÀÇ ÃʱâÈ­¿Í È¥ µ¿ÇÏ°Ô µÇ´Â ¼ö°¡ ´õ·¯ ÀÖ´Ù. ¿¹¸¦ µé¾î ¾Æ·¡¿Í °°Àº µÎ ¼±¾ð¹®ÀÌ ÀÖÀ» ¶§, char s[] = "ABCDE"; char *ps = "ABCDE"; ÀÌ µÎ ¼±¾ð¹®Àº Àü2Çô ´Ù¸¥ °ÍÀ̶ó´Â »ç½ÇÀ» ¸íÈ®ÇÏ°Ô ¾Ë¾Æ¾ß ÇÑ´Ù. ù ¹ø° ¼±¾ð¹®Àº ¹è¿­Å©±â°¡ 6ÀÎ ÀÏÂ÷¿ø ¹®ÀÚ ¹è¿­ s¸¦ Á¤ÀÇÇÑ °ÍÀÌ°í, µÎ¹ø ° ¼±¾ð¹®Àº ¹®ÀÚ¿­ »ó¼ö "ABCDE"¸¦ °¡¸®Å°´Â Æ÷ÀÎÅÍ º¯¼ö ps¸¦ Á¤ÀÇÇÑ °Í ÀÌ´Ù. [±×¸² 9] s¿Í psÀÇ Â÷ÀÌ --------------------------------------------------------------------- s ps +---+---+---+---+---+---+ +-------+ | A | B | C | D | E | \0| | o --+---+ +---+---+---+---+---+---+ +-------+ | 2 | | +---------+ | ABCDE\0 | +---------+ --------------------------------------------------------------------- ÀÌ¿Í °°ÀÌ ¹®ÀÚ ¹è¿­°ú Æ÷ÀÎÅÍ ¶Ç´Â Æ÷ÀÎÅÍ ¹è¿­ÀÇ ÃʱâÈ­ ¹æ¹ý¿¡ Ç× »ó ÁÖÀÇÇϸ鼭 <¿¹Á¦ 8>À» ºÐ¼®Çغ¸±â ¹Ù¶õ´Ù. <¿¹Á¦ 8>Àº ¾ÕÀÇ <¿¹Á¦ 4> ¸¦ ¼öÁ¤ÇÑ °ÍÀ¸·Î¼­ µÎ ¹è¿­À» Ãʱâ2È­ÇÏ´Â ½ÃÁ¡¸¸ÀÌ ´Ù¸¦ »Ó ±× ³ª¸ÓÁö´Â ¶È°°´Ù. ¶ÇÇÑ "ÃʱâÈ­°¡ ¹è¿­ÀÇ Á¤ÀÇ¿Í µ¿½Ã¿¡ ÀÌ·ç¾îÁö¹Ç·Î ¸Þ¸ð¸®ÀÇ ³¶ºñ°¡ ¾ø´Â °Í"ÀÌ Æ¯Â¡ÀÌ´Ù. ´Ü, ±× ¹®ÀÚ ¹è¿­ÀÇ ±â¾ïºÎ·ù(storage class)°¡ ¿Ü ºÎÇü(external), ¶Ç´Â Á¤Àû(static)À̾î¾ß¸¸ ¸Þ¸ð¸®ÀÇ ³¶ºñ°¡ ¾ø°Ô µÈ´Ù. ÀÚµ¿¹è¿­À̸é ÇÔ¼ö È£Ãâ½Ã¸¶´Ù ¸Å¹ø ÃʱâÈ­µÇ¾î¾ß Çϱ⠶§¹®¿¡ ¸Þ¸ð¸®°¡ ÀüÇô Àý¾àµÇÁö ¾Ê´Â´Ù´Â »ç½Ç¿¡ ÁÖÀÇÇØ¾ß ÇÒ °ÍÀÌ´Ù. ±×·± ±î´ß¿¡ <¿¹Á¦ 8>¿¡¼­´Â ¸Þ¸ð¸®ÀÇ ³¶ºñ¸¦ ¾ø¾Ö±â À§ÇÏ¿© days³ª months¸¦ Á¤Àû¹è¿­·Î Á¤ ÀÇÇß´Ù. <¿¹Á¦ 8>2 ¹®ÀÚ ¹è¿­°ú Æ÷ÀÎÅÍ ¹è¿­ÀÇ ÃʱâÈ­ ºñ±³ --------------------------------------------------------------------- #include <--- ¸ÅÅ©·Î »ó¼ö NULLÀÌ Á¤ÀǵǾî ÀÖ´Ù. void main(void) { static char days[][4] = { <--- rectangular ¹è¿­ "", "SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT", }; static char *months[] = { <--- ragged ¹è¿­ NULL, ½ÇÁ¦°ªÀº 0ÀÌ´Ù. "January", "February", "March", "April", "May", 2 "June", "July", "August", "September", "October", "November", "December", }; int i; for (i = 1; i <= 7; i++) printf("%-4s", days[i]); printf("\n"); for (i = 1; i <= 12; i++) printf("%-10s", months[i]); printf("\n"); } --------------------------------------------------------------------- ½ÇÇà °á°ú SUN MON TUE WED THU FRI SAT January February March April May June July August September October 2 November December --------------------------------------------------------------------- --------------------------------------------------------------------- 7 ³¡À¸·Î --------------------------------------------------------------------- ÇÊÀÚ°¡ µ¶ÀÚ¿Í ¾à¼ÓÇÑ ºÐ·®Àº ÀÌ°ÍÀ¸·Î½á ´ÙÇß´Ù. ¾î¶²°¡? À̸¸Çϸé C ÀÇ Æ÷ÀÎÅ͵µ º° °Í ¾Æ´Ï¶ó°í Å«¼Ò¸® Ä¥ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ¹°·Ð Áö³­ 9¿ùÈ£ ºÎÅÍ 4°³¿ù¿¡ °ÉÃÄ ¿¬ÀçÇÑ °Í¸¸ Á¦´ë·Î ¼ÒÈ­ÇØ ³ÂÀ» ¶§ÀÇ ¾ê±â´Ù. Áö¸é °ü°è»ó ¹è¿­ÀÇ ÃʱâÈ­ ¹æ¹ý, ¸í·2ÉÇà ÀÎÀÚ(command line argumen t)ÀÇ »ç¿ë¹ý, ÇÔ¼ö Æ÷ÀÎÅÍ(function pointer)ÀÇ »ç¿ë¹ý µîµîÀ» ¾ð±ÞÇÏÁö ¸øÇÑ °ÍÀÌ ¾Æ½±Áö¸¸ ¾î·µç ÀÌ°ÍÀ¸·Î¼­ ±æÁöµµ ªÁöµµ ¾ÊÀº "Á¤º¹ Åͺ¸ C" ¿¬À縦 ¸¶Ä¡°íÀÚ ÇÑ´Ù. <Á¦4ȸ ³¡> ÀÌ°ÍÀ¸·Î¼­ ¿¬À縦 ¸¶Ä¨´Ï´Ù. ±×·³ À̸¸ turbo28 Åͺ¸ÀÌ»¡ ÀÓ ÀÎ °Ç