¸®´ª½º ȯ°æ¿¡¼­ÀÇ C ÇÁ·Î±×·¡¹Ö 10Àå Pointer ¿Í ¹è¿­
ÃÑ ÆäÀÌÁö ¼ö : 3224

Àüü ÇÔ¼ö/¿ë¾î»çÀü
Facebook Joinc ±×·ì   Joinc QA »çÀÌÆ®



joinc´Â Firefox¿Í chrome¿¡¼­ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼­´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù.

Contents

1 ¸Þ¸ð¸®
2 ¸Þ¸ð¸®ÀÇ ±¸Á¶
3 Æ÷ÀÎÅÍ
4 ¸Þ¸ð¸® ÇÒ´ç
5 ¼±¾ð½Ã Á¤ÀÇ
6 Æ÷ÀÎÅÍ¿¡ Á¢±ÙÇϱâ - ¹è¿­Ã·ÀÚ ÀÌ¿ë
7 Æ÷ÀÎÅÍ Á¢±ÙÇϱâ - Æ÷ÀÎÅ͸¦ ÀÌ¿ë
8 ¹è¿­°ú Æ÷ÀÎÅÍ
9 Æ÷ÀÎÅÍ¿¡¼­ »ç¿ëµÇ´Â ¿¬»êµé
9.1 ÂüÁ¶ ¿¬»êÀÚ
9.2 ÁÖ¼Ò ¿¬»êÀÚ
9.3 µ¡¼À¿¬»ê
10 ´ÙÂ÷¿ø Æ÷ÀÎÅÍ
11 ÇÒ´çµÇÁö ¾ÊÀº Æ÷ÀÎÅÍ
12 ¼±¾ð½Ã Æ÷ÀÎÅÍÀÇ ÃʱâÈ­
13 ¹®Á¦

1 ¸Þ¸ð¸®

Çö´ëÀûÀÎ ÄÄÇ»ÅÍ´Â ÀÔ·Â, ¿¬»ê, Ãâ·ÂÀÇ 3°¡Áö °úÁ¤ÀÌ ºÐ¸®µÇ¾î ÀÖ´Ù. ÀÌ´Â Àΰ£ÀÇ »ý°¢ÇÏ´Â ±¸Á¶¿Í ºñ½ÁÇÏ´Ù. ¿©·¯ºÐÀÇ ´«¾Õ¿¡ ³¯¾Æ µé¸é, ´«À¸·Î À̸¦ È®ÀÎÇϰí (ÀÔ·Â), ³ú·Î Àü´ÞÇØ¼­ °í¹ÎÀ» ÇÑ´ÙÀ½ (¿¬»ê), ´«À» °¨À» °ÇÁö ¾ó±¼À» µ¹¸±°ÇÁö¸¦ °áÁ¤ (Ãâ·Â) ÇÏ°Ô µÉ°ÍÀÌ´Ù. À̶§ ¸ðµç Á¤º¸´Â ³ú·Î Àü´ÞµÇ¾î¼­, ³úÀÇ Æ¯Á¤ºÎÀ§¿¡ ÀúÀåµÈÈÄ¿¡ 󸮵ÊÀ» ¾Ë ¼ö ÀÖ´Ù. ÄÄÇ»ÅÍ ¿ª½Ã Űº¸µå, Çϵåµð½ºÅ©, CD µîÀ» ÅëÇØ¼­ ÀÔ·ÂµÈ ¸ðµç Á¤º¸´Â ÀÏ´Ü ¸Þ¸ð¸®¿¡ ÀúÀåÀÌ µÈ ´ÙÀ½ CPU ¿¡ ÀÇÇØ¼­ ¿¬»ê󸮸¦ Çϰí, ±× °á°ú¸¦ ¸ð´ÏÅ͵îÀ» ÅëÇØ¼­ Ãâ·ÂÇÏ°Ô µÈ´Ù.

2 ¸Þ¸ð¸®ÀÇ ±¸Á¶

¸ðµç Á¤º¸¸¦ ÀÏ´Ü ¸Þ¸ð¸®¿¡ ÀúÀåÇÑ´Ù´Â °ÍÀº ½±°Ô ÀÌÇØÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ±×·¸´Ù¸é ¸Þ¸ð¸®¸¦ Á¦¾îÇÏ´Â ±â´É¿ª½Ã ÇÊ¿ä·Î ÇÒ °ÍÀÌ´Ù. Áï µ¥ÀÌÅͰ¡ ÀúÀåµÉ ¸Þ¸ð¸®¸¦ ÇÒ´çÇØ¼­, ÇØ´ç ¿µ¿ª¿¡ µ¥ÀÌÅ͸¦ ÀúÀåÇϰí, ´Ù½Ã µ¥ÀÌÅ͸¦ ²¨³»¿À´Â ÀÏÀÌ´Ù. À̸¦ À§Çؼ­´Â µ¥ÀÌÅͰ¡ ¸Þ¸ð¸®ÀÇ ¾î´À ÁöÁ¡¿¡ ÀúÀåµÇ¾ú´ÂÁö¿¡ ´ëÇÑ Á¤º¸¸¦ °¡Áö°í ÀÖ¾î¾ßÇÒ Çʿ䰡 ÀÖ´Ù. À̸¦ À§Çؼ­ Çö´ëÀÇ ÄÄÇ»ÅÍ ½Ã½ºÅÛÀº ¸Þ¸ð¸®¿¡ ÁÖ¼Ò¸¦ ºÎ¿©Çؼ­ »ç¿ëÇϰí ÀÖ´Ù. ÁÖ¼Ò´Â ¿ìÆíÇÔ°ú ¸Å¿ì ºñ½ÁÇÑ Á¡ÀÌ ÀÖ´Ù.

agl.gif

¿ìÆíÇÔ°ú ºñ½ÁÇÏ°Ô ÄÄÇ»ÅÍ´Â ¸Þ¸ð¸®¿¡ ÀÏ·ÃÀÇ ¼ýÀÚ·ÎµÈ ÁÖ¼Ò¸¦ ºÎ¿©Çؼ­, µ¥ÀÌÅͰ¡ ÀúÀåµÈ À§Ä¡¸¦ ã°Ô µµ´Ï´Ù. ÀÌ ÁÖ¼Ò´Â 0ºÎÅͽÃÀÛÇÏ°Ô µÈ´Ù. ÁÖ¼ÒÀÇ ÃÖ¼Ò´ÜÀ§´Â byte ´Ù. ÀÌ·¸°Ô ÁÖ¼Ò¹æ½ÄÀ» äÅÃÇÑ ÀÌÀ¯´Â °£´ÜÇÑ °ü¸®°¡ °¡´ÉÇϸç, °ü¸®¸¦ À§ÇÑ µµ±¸¸¦ ½±°Ô ¸¸µé ¼ö Àֱ⠶§¹®ÀÌ´Ù.

3 Æ÷ÀÎÅÍ

ÀÌ·¸°Ô ¸Þ¸ð¸®ÀÇ ÁÖ¼Ò¸¦ °ü¸®Çϱâ À§Çؼ­, C¾ð¿¡¼­¼­ »ç¿ëÇÏ´Â µµ±¸°¡ ¹Ù·Î Æ÷ÀÎÅÍ´Ù. Æ÷ÀÎÅÍ´Â ¸Þ¸ð¸®»óÀÇ ÁÖ¼Ò°ªÀ» ÀúÀåÇϱâ À§ÇÑ µ¥ÀÌÅÍ Å¸ÀÔÀ¸·Î 4byte ÀÇ ÀúÀå°ø°£À» °¡Áö¸ç, º°Ç¥ *¸¦ ÀÌ¿ëÇØ¼­ Æ÷ÀÎÅÍÇü º¯¼ö¸¦ ¼±¾ðÇÒ ¼ö°¡ ÀÖ´Ù. º¯¼ö¸í¾Õ¿¡ *¸¦ ºÙ¿©ÁÖ¸é Æ÷ÀÎÅÍÇü º¯¼ö°¡ µÈ´Ù.
*data; 
 

¿©±â¿¡¼­ ÁÖ¸ñÇÒ Á¡Àº Æ÷ÀÎÅÍ´Â µ¥ÀÌÅͰ¡ ÀúÀåµÈ °÷ÀÇ ÁÖ¼Ò°ª¸¸À» °¡Áö°í ÀÖ´Ù´Â Á¡ÀÌ´Ù. ÇØ´ç ¿µ¿ªÀÇ µ¥ÀÌÅͰ¡ ¾î¶² ŸÀÔÀÎÁö¸¦ ¾Ë¼ö´Â ¾ø´Ù. ÇØ¼­ ÁÖ¼Ò°¡ °¡¸®Å°´Â °÷¿¡ ÀúÀåµÈ µ¥ÀÌÅÍÀÇ µ¥ÀÌÅÍŸÀÔÀ» ¸í½ÃÇϱâ À§Çؼ­ *¿Í ÇÔ²² µ¥ÀÌÅÍ Å¸ÀÔÀ» ÇÔ²² »ç¿ëÇÑ´Ù. ¿¹¸¦ µé¾î int Çüµ¥ÀÌÅͰ¡ ÀúÀåµÈ °÷ÀÇ ÁÖ¼Ò¸¦ °¡¸®Å°´Â Æ÷ÀÎÅÍÇü º¯¼ö *data´Â ´ÙÀ½°ú °°ÀÌ ¼±¾ðµÈ´Ù.
int *data; 
 
ÀÌÁ¦ ¿ì¸®´Â int Çü µ¥ÀÌÅͰ¡ ÀúÀåµÈ ¸Þ¸ð¸®»óÀÇ À§Ä¡¸¦ ¾Ë°Ô µÇ¾ú´Ù. ¶ÇÇÑ ÇØ´ç ¸Þ¸ð¸®¿¡ ÀúÀåµÉ µ¥ÀÌÅÍÀÇ Å¸ÀÔÀÌ int ÇüÀ̶õ°É ¾Ë°Ô µÇ¾úÀ¸¹Ç·Î, intÇü µ¥ÀÌÅ͸¦ ¸¶À½´ë·Î Á¦¾îÇÒ ¼ö ÀÖ°Ô µÈ´Ù. ¿ì¸®´Â data ¸¦ int Çü Æ÷ÀÎÅÍ º¯¼ö¶ó°í ÇÑ´Ù.

¹®Á¦
  1. float Çü Æ÷ÀÎÅÍ º¯¼ö fdata ¸¦ ¼±¾ðÇØ º¸ÀÚ.
  2. charÇü Æ÷ÀÎÅÍ º¯¼ö cdata ¸¦ ¼±¾ðÇØ º¸ÀÚ.

4 ¸Þ¸ð¸® ÇÒ´ç

º¯¼ö´Â °ªÀ» ÀúÀåÇϱâ À§Çؼ­ »ç¿ëÇÑ´Ù. int Çü º¯¼ö data ¿¡ 4¸¦ ÀúÀåÇϰíÀÚ ÇÑ´Ù¸é ¾Æ·¡¿Í °°ÀÌ Äڵ带 ¸¸µé¸é µÉ °ÍÀÌ´Ù.
int data; 
data = 4; 
 

Æ÷ÀÎÅͺ¯¼ö ¿ª½Ã °ªÀ» ÀúÀåÇϱâ À§Çؼ­ »ç¿ëÇÑ´Ù. ±×·¯³ª ÀÌ °ªÀÌ ÁÖ¼Ò°ªÀ̶ó´Â ´Ù¼Ò ƯÀÌÇÑ ¸éÀÌ ÀÖ´Ù. ´Ù¸¥ µ¥ÀÌÅÍ Å¸ÀÔÀÇ º¯¼öµéÀº ´ëÀÔ¿¬»êÀÚ¸¦ ÅëÇØ¼­ »ç¿ëÀÚ°¡ Á÷Á¢ °ªÀ» ÀÔ·ÂÇÒ ¼ö ÀÖÁö¸¸, ÁÖ¼Ò°ªÀº ±×·¸°Ô ÇÒ ¼ö°¡ ¾ø´Ù. ¿Ö³ÄÇÏ¸é µ¥ÀÌÅͰ¡ ÀúÀåµÉ À§Ä¡´Â ´ÜÁö ¿î¿µÃ¼Á¦¸¸ÀÌ °áÁ¤ÇÒ ¼ö Àֱ⠶§¹®ÀÌ´Ù. ±×·¯¹Ç·Î Æ÷ÀÎÅÍ¿¡ »ç¿ëµÉ ÁÖ¼Ò°ªÀ» ¿ì¸®°¡ Á÷Á¢ °áÁ¤ÇÏ´Â ´ë½Å¿¡, ¿î¿µÃ¼Á¦¿¡°Ô ¿äûÀ» ÇÏ°Ô µÈ´Ù.

ÀÌ ¿äûÀº ´ÙÀ½°ú °°Àº Àǹ̸¦ °¡Áø´Ù.
µ¥ÀÌÅ͸¦ ÀúÀåÇϱâ À§Çؼ­ ¸î byte Á¤µµÀÇ °ø°£ÀÌ ÇÊ¿äÇÕ´Ï´Ù. ÀÌ °ø°£À» ¸¸µé°í, ÀÌ °ø°£ÀÇ ÁÖ¼Ò¸¦ ¾Ë·ÁÁÖ¼¼¿ä. 
 

À¯´Ð½º ¿î¿µÃ¼Á¦´Â ÇÁ·Î±×·¥ÀÌ ½±°Ô ÀÌ·¯ÇÑ ¸Þ¸ð¸®¸¦ ¿äûÇÒ ¼ö ÀÖµµ·Ï malloc(3) À̶ó´Â ÇÔ¼ö¸¦ Á¦°øÇϰí ÀÖ´Ù. malloc(3)ÇÔ¼ö¸¦ ÀÌ¿ëÇØ¼­ ÇÊ¿äÇÑ °ø°£¸¸Å­À» ¹ÙÀÌÆ® ´ÜÀ§·Î ¿äûÇϸé, ¿î¿µÃ¼Á¦´Â ±×¸¸Å­ÀÇ °ø°£À» ¸Þ¸ð¸®¿¡¼­ ã¾Æ³½´ÙÀ½, ÇØ´ç ¸Þ¸ð¸®¿µ¿ªÀÇ ÁÖ¼Ò°ªÀ» Æ÷ÀÎÅÍ µ¥ÀÌÅÍ Å¸ÀÔÀ¸·Î ¾Ë·ÁÁØ´Ù. ´ÙÀ½Àº malloc ÇÔ¼öÀÇ »ç¿ë¹ýÀÌ´Ù.
#include <stdlib.h> 
 
void *malloc(size_t size); 
 
size_t ´Â typedef unsigned int size_t ·Î Á¤ÀǵǾî ÀÖ´Ù. ±×·¯¹Ç·Î ÃÖ´ë 4Gbyte Á¤µµÀÇ ¸Þ¸ð¸® ÇÒ´çÀÌ °¡´ÉÇÏ´Ù. ÇÁ·Î±×·¥ÀÌ Çѹø¿¡ »ç¿ë°¡´ÉÇÑ ¸Þ¸ð¸®ÀÇ ÃÑÅ©±â°¡ 4Gbyte´Ù ¶ó´Â ¸»À» µé¾îº¸¾ÒÀ» °ÍÀÌ´Ù. ÀÌ Á¦ÇÑÀº ¿©±â¿¡¼­ »ý±ä´Ù. À̰ÍÀº ÀϹÝÀûÀÎ 32bit ÄÄÇ»ÅÍ/¿î¿µÃ¼Á¦ ½Ã½ºÅÛÀÇ °æ¿ìÀ̰í, 64bit ¿î¿µÃ¼Á¦¶ó¸é Å×¶ó´ÜÀ§ÀÇ ¸Þ¸ð¸® »ç¿ëÀÌ °¡´ÉÇÒ °ÍÀÌ´Ù. ¹¹ ±»ÀÌ 4Gbyte ÀÌ»óÀÇ ¸Þ¸ð¸®¸¦ ¾µÀÏÀÌ ÀÖÀ»·Á³ª ÇÏ°í »ý°¢ÇÒÁöµµ ¸ð¸£°ÚÁö¸¸, °ú°Å DOS ½ÃÀý 64k ·Îµµ ¸Þ¸ð¸®°¡ Â÷°í³ÑÄ£´Ù°í ÁÖÀåÇß´ø ÀûÀÌ ÀÖ¾úÀ½À» ±â¾ïÇØº¸±â ¹Ù¶õ´Ù. °í¼º´É/´ë¿ë·® ÇÁ·Î±×·¥ÀÇ ÃâÇöÀ¸·Î 64bit ÄÄÇ»ÆÃ ȯ°æÀÌ ¿äûÀÌ ¾Õ´ç°ÜÁö°í ÀÖ´Ù.

mallocÀ» È£ÃâÇßÀ» ¶§, ¸®ÅϵǴ °ªÀº ¸Þ¸ð¸®ÀÇ ÁÖ¼ÒÁ¤º¸¸¦ °¡Áö°í ÀÖ´Â Æ÷ÀÎÅÍÀÌ´Ù. ÀÌ Æ÷ÀÎÅÍ´Â ÇÒ´çµÈ ¸Þ¸ð¸®ÀÇ Ã¹¹øÂ° ÁÖ¼Ò¸¦ °¡¸®Å°°Ô µÈ´Ù.

malloc.png

±×·³ int Çü Æ÷ÀÎÅ͸¦ Çϳª ¸¸µé°í, ¿©±â¿¡ 5°³ÀÇ int Çü °ªÀÌ µé¾î°¥ ¼ö ÀÖ´Â ¸Þ¸ð¸® °ø°£À» ¸¸µé¾î º¸µµ·Ï ÇϰڴÙ.
#include <stdlib.h> 
 
int main() 
{ 
    int *idata;                                   // int Çü Æ÷ÀÎÅÍ idata ÀÇ ¼±¾ð 
    idata = malloc(sizeof(int) * 5);    // ¸Þ¸ð¸® ÇÒ´ç. 
} 
 
sizeof´Â ÁÖ¾îÁø µ¥ÀÌÅÍŸÀÔÀÇ Å©±â¸¦ ¾Ë·ÁÁÖ±â À§Çؼ­ »ç¿ëÇϴ Ű¿öµå ¸í·É¾î´Ù. int´Â 4byteÀÇ Å©±â¸¦ °¡Áö¹Ç·Î, 4*5 = 20 ÇØ¼­ 5°³ÀÇ int Çüµ¥ÀÌÅͰ¡ µé¾î°¡´Â °ø°£ÀÌ ¸¸µé¾îÁö°Ô µÈ´Ù. malloc ÇÔ¼ö´Â 20byte ¸¸Å­ Å©±âÀÇ ¸Þ¸ð¸®°ø°£À» È®º¸ÇÑ´ÙÀ½¿¡, ±× ÁÖ¼Ò¸¦ µÇµ¹·ÁÁØ´Ù. ÀÌ ÁÖ¼Ò°ªÀº Æ÷ÀÎÅÍÇü º¯¼ö idata¿¡ µé¾î°£´Ù.

5 ¼±¾ð½Ã Á¤ÀÇ

À§ÀÇ °æ¿ì malloc ¸¦ ÀÌ¿ëÇØ¼­ ÇÁ·Î±×·¥ÀÇ ½ÇÇà Áß°£¿¡ ¸Þ¸ð¸® °ø°£À» ÇÒ´çÇß´Ù. ÀÌ·¸°Ô Áß°£ Áß°£ ÇÊ¿äÇÒ¶§ ÇÒ´çÇÏ´Â °ÍÀ» µ¿ÀûÇÒ´çÀ̶ó°í ÇÑ´Ù. ±×·¸Áö ¾Ê°í, Æ÷ÀÎÅÍ º¯¼ö°¡ ¼±¾ðµÉ¶§ °ªÀ» Á¤ÀÇ ÇÏ´Â ¹æ¹ýµµ ÀÖ´Ù. ¾Æ·¡´Â 9Àå¿¡¼­ ´Ù·ç¾ú´ø, hello ÇÁ·Î±×·¥ÀÇ Æ÷ÀÎÅÍ ¹öÁ¯ÀÌ´Ù.
#include <stdio.h> 
 
int main() 
{ 
    char *hello = "hello world\0"; 
    printf("%s\n",hello); 
} 
 
ÀÌ °æ¿ì ÇÁ·Î±×·¥ÀÌ ½ÇÇàµÇ´Â ½ÃÁ¡¿¡¼­ ¸Þ¸ð¸® °ø°£À» ÇÒ´çÇÑ ´ÙÀ½, ÇØ´ç °ø°£¿¡ "hello world\0"À» ÀúÀåÇÑ ´ÙÀ½, ÀúÀåµÈ ÁÖ¼Ò¸¦ Æ÷ÀÎÅÍ º¯¼ö hello¿¡ ³Ñ°ÜÁÖ°Ô µÈ´Ù. ¸Þ¸ð¸®ÀÇ ±¸¼ºÀº ¹è¿­°ú µ¿ÀÏÇÏ´Ù.

¹®Á¦
hello.c ÀÇ Æ÷ÀÎÆ® ¹öÁ¯À» ·çÇÁ¿Í ¹è¿­Ã·ÀÚ¸¦ ÅëÇØ¼­ ¹®ÀÚ¸¦ Ãâ·ÂÇϵµ·Ï ÇØº¸ÀÚ.


6 Æ÷ÀÎÅÍ¿¡ Á¢±ÙÇϱâ - ¹è¿­Ã·ÀÚ ÀÌ¿ë

malloc.png

ÀÚ ÀÌ·¸°Ô ÇØ¼­ ¸Þ¸ð¸® °ø°£ÀÌ È®º¸µÇ°í, ±×¿¡ ´ëÇÑ ÁÖ¼Ò°ªµµ ¾Ë¾Æ¿Ô´Ù. ÀÌÁ¦ ÇØ´ç ÁÖ¼Ò¿¡ Á¢±ÙÇØ¼­ °ªÀ» Àаųª ¾²¸é µÉ°ÍÀÌ´Ù. ¸Þ¸ð¸®°¡ ÇÒ´çµÈ À§ÀÇ ±×¸²À» º¸¸é ¾Ë°ÚÁö¸¸, ÇÒ´çµÈ Å©±â¸¸Å­ À妽º·Î Á¢±ÙÇÒ ¼ö ÀÖÀ½À» ¾Ë ¼ö ÀÖÀ» °ÍÀÌ´Ù. À̰ÍÀº ¸¶Ä¡ ¹è¿­°ú °°Àº Á¢±Ù±¸Á¶Àε¥, ½ÇÁ¦ ¹è¿­°ú µ¿ÀÏÇÏ°Ô ¹è¿­Ã·ÀÚ¸¦ ÀÌ¿ëÇØ¼­ ¸Þ¸ð¸® °ø°£¿¡ Á¢±ÙÇÒ ¼ö ÀÖ´Ù. À§ÀÇ malloc ÇÁ·Î±×·¥À» ¾à°£ ¼öÁ¤Çؼ­ 5°³ÀÇ °ø°£¿¡ 0ºÎÅÍ 5±îÁö ä¿ö³Öµµ·Ï ¸¸µé¾î º¸ÀÚ.
#include <stdlib.h> 
 
int main() 
{ 
    int *idata; 
    int i; 
 
    idata = malloc(sizeof(int) * 5); 
 
    for (i = 0; i < 5; i++) 
    { 
        idata[i] = i; 
    } 
} 
 

7 Æ÷ÀÎÅÍ Á¢±ÙÇϱâ - Æ÷ÀÎÅ͸¦ ÀÌ¿ë

À§ÀÇ ÇÁ·Î±×·¥Àº ¹è¿­Ã·ÀÚ¸¦ ÀÌ¿ëÇØ¼­ µ¥ÀÌÅÍ¿¡ Á¢±ÙÀ» ÇßÁö¸¸, Æ÷ÀÎÅÍ ¿¬»êÀ» ÀÌ¿ëÇØ¼­ Á¢±ÙÇÒ ¼öµµ ÀÖ´Ù. Æ÷ÀÎÅ͵µ ÀÏ¹Ý µ¥ÀÌÅÍ Å¸ÀÔÀ̹ǷΠ+¿Í °°Àº ¿¬»êÀÚ¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ¸¸¾à Æ÷ÀÎÅÍ¿¡ +1 À» ÇÑ´Ù¸é, Æ÷ÀÎÅͰ¡ °¡¸®Å°´Â ÁÖ¼Ò°ªÀÌ 1¸¸Å­ Áõ°¡Çؼ­ ´ÙÀ½ °ªÀ» °¡¸®Å°°Ô µÉ°ÍÀÌ´Ù. Æ÷ÀÎÅÍ ¿¬»êÀº ´ÙÀ½°ú °°ÀÌ °£´ÜÇÏ°Ô ¼öÇàÇÒ ¼ö ÀÖ´Ù.
char *cdata = "hello world\0"; 
cdata = cdata+1; 
 
cdata´Â "hello world\0" °¡ ÀúÀåµÈ ¸Þ¸ð¸® ¿µ¿ªÀÇ Ã¹¹øÂ° ÁÖ¼Ò°ªÀ» °¡Áö°í ÀÖÀ¸¹Ç·Î, h¸¦ °¡¸®Å°°í ÀÖÀ» °ÍÀÌ´Ù. ¿©±â¿¡ + 1 À» ÇØÁشٸé, 1byte ¸¸Å­ Áõ°¡µÈ À§Ä¡ÀÎ e¸¦ °¡¸®Å°°Ô µÉ °ÍÀÌ´Ù. ¾Æ·¡ÀÇ ±×¸²À» º¸¸é ½±°Ô ÀÌÇØÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù.

pointer2.png

¿©±â¿¡¼­ È¥µ¿ÇÒ ¼ö ÀÖ´Â °ÍÀÌ ¿Ö *cdata = *cdata+1; ÀÌ ¾Æ´Ï°í cdata = cdata+1; Àΰ¡ ÇÏ´Â Á¡ÀÏ °ÍÀÌ´Ù. *´Â ÂüÁ¶ ¿¬»êÀÚ·Î Æ÷ÀÎÅͰ¡ °¡¸®Å°´Â °÷ÀÇ °ªÀ» ÂüÁ¶Çϰڴٴ °ÍÀ» ÀǹÌÇÑ´Ù. Áï *cdata´Â Æ÷ÀÎÅÍ º¯¼ö cdata°¡ °¡¸®Å°´Â ÁÖ¼ÒÀÇ °ªÀÎ h¸¦ ÂüÁ¶Çϰڴٴ ÀǹÌÀ̸ç, *cdata+1 À» ÇØ¹ö¸®¸é, ÁÖ¼Ò¸¦ Áõ°¡½ÃŰ´Â°Ô ¾Æ´Ñ, °ª 'h'¿¡ +1À» ÇÏ´Â È¿°ú¸¦ Áö³»°Ô µÈ´Ù. 'h'¿¡ 1À» ´õÇϸé, 'i'°¡ µÈ´Ù. À̰ÍÀº ¿ì¸®°¡ ¿øÇÏ´Â ¹Ù°¡ ¾Æ´Ï´Ù.

¿ì¸®°¡ ¿øÇÏ´Â °ÍÀº Æ÷ÀÎÅÍ °ªÀÌ ¾Æ´Ñ ÁÖ¼Ò¸¦ 1¸¸Å­ Áõ°¡½ÃŰ´Â °ÍÀ̹ǷΠcdata+1À» ÇØ¾ß¸¸ ÇÑ´Ù. ¾Æ·¡ÀÇ Äڵ带 ½ÇÇà½ÃÄÑ º¸±â ¹Ù¶õ´Ù.
#include <stdio.h> 
 
int main() 
{ 
    int *idata; 
    int i; 
    idata = (int *)malloc(sizeof(int)*5); 
    for(i = 0; i < 5; i++) 
    { 
        idata[i] = i; 
    } 
    *idata = *idata+2; 
    printf("%d\n", idata[0]); 
} 
 
*idata °¡ °¡¸®Å°´Â ÁÖ¼ÒÀÇ °ªÀº 0ÀÌ´Ù. ¿©±â¿¡ 2¸¦ ´õÇÏ°Ô µÇ¹Ç·Î *idata = *idata+2 ´Â Æ÷ÀÎÅͰ¡ °¡¸®Å°´Â ù¹øÂ° °ªÀ» 2·Î ¹Ù²Ù¾î ¹ö¸®°Ô µÉ °ÍÀÌ´Ù. idata = idata+2 ·Î ÇÏ°Ô µÇ¸é ¿ì¸®°¡ ¿øÇÏ´Â ¹Ù´ë·Î, 3¹øÂ° °ªÀÎ 2¸¦ Àоî¿À°Ô µÉ °ÍÀÌ´Ù. ´ÙÀ½°ú °°ÀÌ Äڵ带 º¯°æÇÑ ´ÙÀ½ ½ÇÇàÇØº¸µµ·Ï ÇÏÀÚ.
    idata = idata+2; 
    printf("%d\n", *idata); 
 
ÀÌÁ¦ idata Æ÷ÀÎÅʹ óÀ½ ÁÖ¼Ò¿¡¼­ µÎ¹øÂ° ¸¸Å­ Áõ°¡ÇÑ °÷À» °¡¸®Å°°Ô µÈ´Ù. ÀÌÁ¦ *idata¸¦ printf·Î Ãâ·ÂÇϸé, idata°¡ °¡¸®Å°´Â ÁÖ¼ÒÀÇ °ªÀÎ 2¸¦ Ãâ·ÂÇÑ´Ù. Á» ´õ Á¤È®È÷ ¼³¸íÇÏÀÚ¸é, idata+2¸¦ ÇÏ°Ô µÇ¸é, ÇöÀç ÁÖ¼Ò°ª¿¡¼­ 4*2 ¸¸Å­À» ´õÇØÁÖ°Ô µÈ´Ù. ¿Ö³Ä¸é idata°¡ intÇü Æ÷ÀÎÅÍ Å¸ÀÔÀ̰í, int µ¥ÀÌÅÍ Å¸ÀÔÀº 4byte¸¦ °¡¸®Å°°Ô µÇ±â ¶§¹®ÀÌ´Ù. ¸¸¾à char ÇüÆ÷ÀÎÅͺ¯¼ö ¿´´Ù¸é 2¸¸Å­¸¸ Áõ°¡ÇÏ°Ô µÉ °ÍÀÌ´Ù.

Æ÷ÀÎÅÍ¿¬»ê¿¡ À־ µ¡¼À¿¬»êÀº ¸Å¿ì ÀÚÁÖ »ç¿ëµÈ´Ù. ±×·¡¼­ Áõ°¡¿¬»êÀÚ¸¦ »ç¿ëÇÒ ¼ö ÀÖµµ·Ï Çã¿ëÇϰí ÀÖ´Ù. idata = idata+2´Â ´ÙÀ½°ú °°ÀÌ º¯°æÇÒ ¼ö ÀÖ´Ù.
*idata += 2; 
 

ÀÚ ±×·³ idataÀÇ ¸ðµç °ªÀ» Ãâ·ÂÇÏ´Â ÇÁ·Î±×·¥À» ¸¸µé¾î º¸µµ·Ï ÇÏÀÚ.
#include <stdio.h> 
 
int main() 
{ 
    int *idata; 
    int i; 
    idata = (int *)malloc(sizeof(int)*5); 
    for(i = 0; i < 5; i++) 
    { 
        idata[i] = i; 
    } 
    for (i = 0; i < 5; i++, *idata++) 
    { 
        printf("%d\n", *idata); 
    } 
} 
 

8 ¹è¿­°ú Æ÷ÀÎÅÍ

¹è¿­°ú Æ÷ÀÎÅÍ´Â ±âº»ÀûÀ¸·Î µ¿ÀÏÇÑ ¸Þ¸ð¸® ±¸Á¶¸¦ °¡Áø´Ù. ¶§¹®¿¡ Æ÷ÀÎÅ͸¦ ¹è¿­Ã³·³ »ç¿ëÇÒ ¼ö ÀÖ´Â °Í°ú ¸¶Âù°¡Áö·Î, ¹è¿­À» Æ÷ÀÎÅÍó·³ »ç¿ëÇÒ ¼öµµ ÀÖ´Ù. ¹è¿­À» »ç¿ëÇØ¼­ µ¥ÀÌÅ͸¦ ÀúÀåÇß´Ù°í ÇÏ´õ¶óµµ °á±¹¿¡´Â ¸Þ¸ð¸®»óÀÇ ÁÖ¼Ò¸¦ ÀÌ¿ëÇØ¼­ µ¥ÀÌÅ͸¦ ²¨³»¿À´Â °ÍÀ̱⠶§¹®ÀÌ´Ù. ÀÌ¹Ì ¾Õ¿¡¼­µµ Æ÷ÀÎÅÍ¿Í ¹è¿­À» ÇÔ²² ¾²´Â °æ¿ì¸¦ ºÃÀ¸¹Ç·Î, ½±°Ô ÀÌÇØÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù.

¿ì¸®´Â µ¥ÀÌÅÍÀÇ ÁÖ¼Ò°ªÀ» ¾ò¾î¿À±â À§ÇÑ ÁÖ¼Ò ¿¬»êÀÚ¸¦ ÀÌ¿ëÇØ¼­ µ¥ÀÌÅͰ¡ ÀúÀåµÈ °÷ÀÇ ÁÖ¼Ò°ªÀ» ¾ò¾î¿Ã ¼ö°¡ ÀÖ´Ù. ÁÖ¼Ò ¿¬»êÀÚ´Â &¸¦ »ç¿ëÇÏ¸é µÈ´Ù. ´ÙÀ½Àº hello ÇÁ·Î±×·¥ÀÇ ¹è¿­ ¹öÀüÀ¸·Î ¹è¿­º¯¼ö¿¡¼­ ÁÖ¼Ò¿¬»êÀÚ¸¦ ÀÌ¿ëÇØ¼­ Æ÷ÀÎÅ͸¦ ¾ò¾î¿À´Â ¹ýÀ» º¸¿©ÁÖ°í ÀÖ´Ù.
#include <stdio.h> 
 
int main() 
{ 
    char hello[] = "hello world\0"; 
    char *cdata1; 
 
    cdata1 = &hello[0]; 
    printf("%s\n",cdata1); 
} 
 
À§ÀÇ ÇÁ·Î±×·¥À» ¾à°£ ¼öÁ¤Çؼ­ char *cdata2 ¶ó´Â Æ÷ÀÎÅÍ º¯¼ö¸¦ ¸¸µé°í, wÀÇ ÁÖ¼Ò¸¦ °¡¸®Å°µµ·Ï ÇØº¸ÀÚ. ¾Æ·¡¿Í °°ÀÌ °£´ÜÇÏ°Ô ±¸ÇöÇÒ ¼ö ÀÖ´Ù. ¾î¶² °á°ú°¡ Ãâ·ÂµÉÁö¸¦ ¿¹ÃøÇØ º¸µµ·Ï ÇÏÀÚ. ¾Æ·¡ÀÇ ±×¸²À» º¸¸é ´õ¿í ½±°Ô °á°ú¸¦ ¿¹ÃøÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù.
arrayto.png
#include <stdio.h> 
 
int main() 
{ 
    char hello[] = "hello world\0"; 
    char *cdata2; 
 
    cdata2 = &hello[6]; 
    printf("%s\n",cdata2); 
} 
 

9 Æ÷ÀÎÅÍ¿¡¼­ »ç¿ëµÇ´Â ¿¬»êµé

¾Õ¿¡¼­ ÀÌ¹Ì Æ÷ÀÎÅÍ¿¡ »ç¿ëµÇ´Â ¿¬»êÀÚµé°ú Æ÷ÀÎÅ͸¦ ÀÌ¿ëÇØ¼­ ÇÒ¼ö ÀÖ´Â ¿¬»ê¿¡ ´ëÇØ¼­ ¾Ë¾ÆºÃ´Ù. À̵éÀº ¸Å¿ì Áß¿äÇϹǷΠÁ¤¸®ÇÏ´Â Â÷¿ø¿¡¼­ ´Ù½Ã ¼³¸íÇØº¸µµ·Ï ÇϰڴÙ.

9.1 ÂüÁ¶ ¿¬»êÀÚ

ÂüÁ¶ ¿¬»êÀÚ´Â *·Î ÇØ´ç ÁÖ¼Ò°¡ °¡¸®Å°´Â °÷ÀÇ °ªÀ» ÂüÁ¶ÇÏ¸ç ´ÙÀ½°ú °°ÀÌ »ç¿ëÇÒ ¼ö ÀÖ´Ù.
#include <stdio.h> 
 
int main() 
{ 
    char *data = "hello world\0"; 
    int i; 
    char *cp = data; 
 
    for (i = 0;;i++) 
    { 
        if (*data == '\0') break;   // data°¡ °¡¸®Å°´Â ÁÖ¼Ò°¡ ÂüÁ¶ÇÏ´Â °ªÀÌ '\0'ÀÌ¸é ·çÇÁ¸¦ ºüÁ®³ª¿Â´Ù. 
        printf("%c\n", *data);      // ÂüÁ¶ ¿¬»êÀÚ¸¦ ÀÌ¿ë data°¡ °¡¸®Å°´Â ÁÖ¼ÒÀÇ ÂüÁ¶°ªÀ» Ãâ·ÂÇÑ´Ù. 
        *data++;                         // Áõ°¡¿¬»êÀÚ¸¦ ÀÌ¿ëÇØ¼­ Æ÷ÀÎÅ͸¦ 1¸¸Å­ Áõ°¡½ÃŲ´Ù. 
    } 
 
    printf("============\n"); 
    data = cp; 
    for (i = 0;;i++) 
    { 
        if (*data == '\0') break;  // ÁÖ¼ÒÀÇ ÂüÁ¶°ªÀÌ '\0'ÀÌ¸é ·çÇÁ¸¦ ºüÁ®³ª¿Â´Ù. 
        printf("%s\n", data);       // Æ÷ÀÎÅͰ¡ °¡¸®Å°´Â °÷ÀÇ µ¥ÀÌÅ͸¦ Ãâ·ÂÇÑ´Ù.  
                                                // %s´Â '\0'À» ¸¸³ª±â Àü±îÁöÀÇ µ¥ÀÌÅ͸¦ È­¸é¿¡ Ãâ·ÂÇÑ´Ù. 
        *data++;                  
    } 
} 
 
À§ ÇÁ·Î±×·¥À» ½ÇÇà½ÃŰ¸é ´ÙÀ½°ú °°Àº °á°ú¸¦ Ãâ·ÂÇÑ´Ù.
h 
e 
l 
l 
o 
 
w 
o 
r 
l 
d 
============ 
hello world 
ello world 
llo world 
lo world 
o world 
 world 
world 
orld 
rld 
ld 
d 
 
¿Ö ÀÌ·± °á°ú°¡ ³ª¿À´ÂÁö ÀÌÇØÇÏ´Â°Ç ±×¸® ¾î·ÆÁö ¾ÊÀ¸¸®¶ó »ý°¢µÈ´Ù.

9.2 ÁÖ¼Ò ¿¬»êÀÚ

¾î¶² °ªÀÌ ÀúÀåµÈ °÷ÀÇ ÁÖ¼Ò¸¦ ¾ò¾î¿À±â À§Çؼ­ »ç¿ëÇÏ´Â ¿¬»êÀÚÀÌ´Ù. ´ÙÀ½°ú °°ÀÌ »ç¿ëÇÒ ¼ö ÀÖ´Ù.
    char *hello = "hello world"; 
    char *data; 
    data = &hello[0]; 
    printf("%s\n", data);  // hello world °¡ Ãâ·ÂµÈ´Ù. 
    data = &hello[6]; 
    printf("%s\n", data);  // world°¡ Ãâ·ÂµÈ´Ù. 
 
Æ÷ÀÎÅÍ º¯¼ö¿¡ µé¾î°¡´Â °ÍÀº °ªÀÌ ÀúÀåµÈ µ¥ÀÌÅÍÀÇ ÁÖ¼ÒÀ̹ǷÎ, ÁÖ¼Ò¿¬»êÀÚ &¸¦ ÀÌ¿ëÇØ¼­ ¾ò¾î¿Â ÁÖ¼Ò¸¦ Æ÷ÀÎÅÍ º¯¼ö¿¡ ´ëÀÔÇÒ ¼ö ÀÖ°Ô µÈ´Ù.

9.3 µ¡¼À¿¬»ê

Æ÷ÀÎÅÍ´Â µ¡¼À¿¬»êÀÌ °¡´ÉÇÏ´Ù. ¿Ö³ÄÇϸé ÀúÀåµÈ µ¥ÀÌÅͰ¡ ÁÖ¼ÒÀ̱⠶§¹®ÀÌ´Ù. ÁÖ¼Ò¿¡ ¼ýÀÚ¸¦ ´õÇÏ´Â ¹æ½ÄÀ¸·Î ¸Þ¸ð¸®ÀÇ ´ÙÀ½À§Ä¡¿¡ ÀÖ´Â ÁÖ¼Ò¸¦ ¾ò¾î¿Ã ¼ö Àֱ⠶§¹®ÀÌ´Ù. ÀÌ·¯ÇÑ µ¡¼À¿¬»êÀÌ °¡´ÉÇѰÇ, µ¥ÀÌÅ͸¦ ÀúÀåÇÒ ¸Þ¸ð¸®¸¦ ÇÒ´çÇÒ¶§ ¿¬¼ÓµÈ °ø°£¿¡ ÇÒ´çÇϱ⠶§¹®ÀÌ´Ù. À̸¦Å׸é ÁÖ¼Ò+1 ÇÏ¸é ´ÙÀ½ ÁÖ¼Ò¸¦ °¡¸®Å°°Ô µÈ´Ù.
    char *hello = "hello world"; 
    printf("%s\n", hello+1); 
 

¸¶Âù°¡Áö·Î Æ÷ÀÎÅÍ º¯¼ö³¢¸® ´õÇϰųª »©´Â °Íµµ °¡´ÉÇÏ´Ù.
    char *hello = "hello world\0"; 
    char *fp = hello; 
    char *sp = hello+6; 
 
    printf("%d\n", sp-fp); 
 
¸Þ¸ð¸® »ó¿¡¼­ sp¿Í fpÀÇ °Å¸®´Â 6ÀÏ °ÍÀÌ´Ù. ±×·¯¹Ç·Î µÎ°³ÀÇ Æ÷ÀÎÅ͸¦ »« °á°ú·Î 6ÀÌ Ãâ·ÂµÉ °ÍÀÌ´Ù. ÀÌ·± Æ÷ÀÎÅÍ ¿¬»êÀ» ¾îµð¿¡ ½á¸ÔÀ» ¼ö ÀÖÀ»Áö °¨ÀÌ ÀâÈ÷Áö ¾ÊÀ» ¼ö ÀÖÀ» °ÍÀÌ´Ù. ±×·¡¼­ Æ÷ÀÎÅÍ ¿¬»êÀ» ÀÌ¿ëÇÑ °£´ÜÇÑ ¿¹Á¦ÇÁ·Î±×·¥À» ¸¸µé¾î º¸¾Ò´Ù. ¾Æ·¡ÀÇ ¿¹Á¦ ÇÁ·Î±×·¥Àº "::" »çÀÌ¿¡ ÀÖ´Â ¹®ÀÚ¸¸À» ¾ò¾î¿À´Â ÇÁ·Î±×·¥ÀÌ´Ù.
#include <stdio.h> 
 
int main() 
{ 
    char *hello = "aaa::data::bbb\0"; 
    char *org = hello; 
    char *fp; 
    char *sp; 
 
    char buf[10] = {'\0',}; 
 
    fp = strstr(hello, "::");       
    printf("%s\n",fp);          // fp´Â ::data::bbb¸¦ °¡¸®Å²´Ù. 
 
    sp = strstr(fp+2, "::");  // fp+2 ´Â data::bbb ÀÌ´Ù. 
    printf("%s\n",sp);         // ±×·¯¹Ç·Î sp´Â ::bbb°¡ µÈ´Ù. 
 
    memcpy(buf,fp+2,(sp - fp)-2); // fp+2´Â data::bbb ÀÌ´Ù. 
                                                    // sp - fp ´Â 6ÀÌ´Ù. ¿©±â¿¡´Â "::"µµ Æ÷ÇԵǾî ÀÖÀ¸¹Ç·Î -2¸¦ ÇØÁØ´Ù. 
                                                    // °á±¹ data::bbb ¿¡¼­ 4¸¸Å­À¸ Å©±âÀÇ µ¥ÀÌÅ͸¦ buf¿¡ º¹»çÇÑ´Ù. 
 
    printf("%s\n",buf);                  // ±×·¯¹Ç·Î data°¡ Ãâ·ÂµÈ´Ù. 
} 
 
strstr(3) Àº ÁÖ¾îÁø ¹®ÀÚ¿­À» ã´Â ÇÔ¼ö·Î, ¹®ÀÚ¿­ÀÌ ¹ß°ßµÈ À§Ä¡ÀÇ Æ÷ÀÎÅ͸¦ ¸®ÅÏÇÑ´Ù. memcpy(3)´Â µ¥ÀÌÅ͸¦ Á¤ÇØÁø Å©±â¸¸Å­ º¹»çÇϱâ À§Çؼ­ »ç¿ëÇÏ´Â ÇÔ¼ö´Ù.

10 ´ÙÂ÷¿ø Æ÷ÀÎÅÍ

¹è¿­°ú ¸¶Âù°¡Áö·Î ´ÙÂ÷¿ø Æ÷ÀÎÅ͸¦ »ç¿ëÇÑ´Ù. ¸»ÀÌ ´ÙÂ÷¿øÀ̰í, 3Â÷¿ø ÀÌ»óÀ» ³Ñ¾î°¡¸é Àΰ£ÀÌ ÀÎÁöÇϱⰡ ¸Å¿ì ¾î·Æ±â ¶§¹®¿¡ - ¿ì¸®´Â 3Â÷¿ø °ø°£¿¡ »ì°í ÀÖÁö¸¸ 3Â÷¿øÀ» ¸Ó¸®·Î ±×·Á³»´Â°Ç ½¬¿îÀÏÀÌ ¾Æ´Ï´Ù. 3Â÷¿ø Àü·« ½Ã¹Ä·¹À̼ÇÀÌ ÄÁÆ®·ÑÇϱ⠱î´Ù·Î¿î ÀÌÀ¯°¡ ¿©±â¿¡ ÀÖ´Ù. - ÀϹÝÀûÀ¸·Î ´ÙÂ÷¿ø Æ÷ÀÎÅͶõ 2Â÷¿ø Æ÷ÀÎÅ͸¸À» °¡¸®Å²´Ù.

Æ÷ÀÎÅÍ´Â µ¥ÀÌÅͰ¡ ÀúÀåµÈ ÁÖ¼Ò¸¦ °¡¸®Å°´Â µ¥ÀÌÅÍ Å¸ÀÔÀÌ´Ù. ÀÌ´Â ¾î¶°ÇÑ Á¾·ùÀÇ µ¥ÀÌÅÍŸÀÔÀÌ¶óµµ °¡¸®Å°´Â Æ÷ÀÎÅÍÀÇ »ý¼ºÀÌ °¡´ÉÇÔÀ» ¾ê±âÇÑ´Ù. int Çü Æ÷ÀÎÅÍ, float Çü Æ÷ÀÎÅͰ¡ ÁÁÀº ¿¹°¡ µÇ°Ú´Ù. 2Â÷¿ø Æ÷ÀÎÅÍ´Â Æ÷ÀÎÅÍ µ¥ÀÌÅÍ Å¸ÀÔÀ» ¸¦ °¡¸®Å°´Â Æ÷ÀÎÅÍÀÌ´Ù. ÀÌ·¯ÇÑ Æ¯Â¡ ¶§¹®¿¡ Æ÷ÀÎÅÍÀÇ Æ÷ÀÎÅͶó°í ºÎ¸£±âµµ ÇÑ´Ù. 2Â÷¿ø Æ÷ÀÎÅÍÀÇ °¡Àå ´ÜÀûÀÎ ¾ê´Â ¶óÀδÜÀ§ ÆíÁý±â¸¦ ¿¹·Î µé ¼ö ÀÖÀ» °ÍÀÌ´Ù. ¾Æ·¡¿Í °°Àº ¹®ÀåÀÌ ÀÖ´Ù°í °¡Á¤ÇØ º¸ÀÚ.
Hello World!! 
My name is yundream. 
What's your name. 
Thank you. 
 

ÀÌ ¹®ÀåÀ» °¢°¢ÀÇ ¶óÀδÜÀ§·Î ÀúÀåÀ» ÇÏ´Â ÇÁ·Î±×·¥À» ¸¸µç´Ù°í °¡Á¤ÇØ º¸ÀÚ. ±×·¸´Ù¸é 4°³ÀÇ char Çü Æ÷ÀÎÅͰ¡ ÇÊ¿äÇÒ °ÍÀÌ´Ù. ÀÌÁ¦ ÀÌ 4°³ÀÇ char Çü Æ÷ÀÎÅÍ µ¥ÀÌÅ͸¦ ÀúÀåÇϱâ À§ÇÑ Æ÷ÀÎÅͺ¯¼ö¸¦ ¸¸µé¸é µÉ°ÍÀÌ´Ù. Æ÷ÀÎÅ͸¦ ÀúÀåÇÏ´Â Æ÷ÀÎÅͺ¯¼öÀÎ ¼ÀÀÌ´Ù. Æ÷ÀÎÅÍÀÇ Æ÷ÀÎÅͺ¯¼ö´Â º°Ç¥¸¦ Çϳª ´õ ºÙÀÌ´Â °ÍÀ¸·Î °£´ÜÈ÷ ¼±¾ðÇÒ ¼ö ÀÖ´Ù. À§ ¿¹ÀÇ °æ¿ì char Æ÷ÀÎÅ͸¦ ÀúÀåÇϱâ À§ÇÑ Æ÷ÀÎÅÍ´Â ¾Æ·¡¿Í °°ÀÌ ¼±¾ðÇÒ ¼ö ÀÖ´Ù.
char **data; 
 
Â÷¿øÀÌ ´Ã¾î³¯ ¼ö·Ï ±×¸¸Å­ÀÇ º°Ç¥¸¦ ºÙ¿©ÁÖ¸é µÈ´Ù. »ç¿ëÇÒÀÏÀÌ °ÅÀÇ ¾ø°ÚÁö¸¸, 3Â÷¿ø Æ÷ÀÎÅÍ´Â ´ÙÀ½°ú °°´Ù.
char ***data; 
 

±×·³ 2Â÷¿ø Æ÷ÀÎÅ͸¦ ÀÌ¿ëÇØ¼­ À§ÀÇ ¹®ÀåÀ» Ãâ·ÂÇÏ´Â ÁÙ´ÜÀ§ Ãâ·Â ÇÁ·Î±×·¥À» ¸¸µé¾î º¸ÀÚ. Æ÷ÀÎÅÍÇü º¯¼öÀÇ À̸§Àº char **data·Î ¼±¾ðÇÑ´Ù. ¼±¾ðÀ» Çß´Ù¸é, ¸Þ¸ð¸® ÇÒ´çÀ» ÇØ¾ß ÇÒ°ÍÀÌ´Ù. 2Â÷¿ø Æ÷ÀÎÅÍ À̹ǷΠ2¹øÀÇ ¸Þ¸ð¸® ÇÒ´çÀÌ ÀÌ·ç¾îÁ®¾ß ÇÑ´Ù.
  1. 4°³ÀÇ ¹®ÀÚÇü Æ÷ÀÎÅ͸¦ ÀúÀåÇϱâ À§ÇÑ °ø°£ ÇÒ´ç.
  2. °¢ ¹®ÀÚµ¥ÀÌÅ͸¦ ÀúÀåÇϱâ À§ÇÑ °ø°£ÇÒ´ç.

¿ì¼± ¹®ÀÚÇü Æ÷ÀÎÅ͸¦ ÀúÀåÇϱâ À§ÇÑ °ø°£Àº ´ÙÀ½°ú °°ÀÌ ÇÒ´çÇÒ ¼ö ÀÖ´Ù.
char **data; 
data = malloc(sizeof(char *)*4); 
 
µ¥ÀÌÅ͸¦ ÀúÀåÇϱâ À§ÇÑ °ø°£À» ÇÒ´çÇÏ·Á¸é, µ¥ÀÌÅÍ Å¸ÀÔÀÇ Å©±â¸¦ ¾Ë°í ÀÖ¾î¾ß ÇÑ´Ù. ¾Õ¼­ sizeof¸¦ ÀÌ¿ëÇÏ¸é µ¥ÀÌÅÍ Å¸ÀÔÀÇ Å©±â¸¦ ¾ò¾î¿Ã ¼ö ÀÖÀ½À» ¾ð±ÞÇß´Ù. ¿ì¸®°¡ ÀúÀåÇϱâ À§ÇÑ µ¥ÀÌÅÍ Å¸ÀÔÀº ¹®ÀÚÇü Æ÷ÀÎÅÍÀ̹ǷΠsizof(char *)¸¦ ÀÌ¿ëÇØ¼­ Å©±â¸¦ ¾ò¾î¿Ã¼ö ÀÖ´Ù. ÀÌ°Ô 4°³°¡ ÇÊ¿äÇϹǷΠ*4¸¦ ÇØÁÖ¸é 4°³ÀÇ ¹®ÀÚÇü Æ÷ÀÎÅÍ µ¥ÀÌÅ͸¦ ÀúÀåÇϱâ À§ÇÑ °ø°£À» ÇÒ´ç¹Þ°Ô µÈ´Ù. Æ÷ÀÎÅÍ µ¥ÀÌÅÍ Å¸ÀÔÀÇ Å©±â´Â 4 À̹ǷΠ16byte ¸¸Å­ÀÇ °ø°£À» ÇÒ´ç¹Þ°Ô µÈ´Ù.

ÀÌÁ¦ 4°³ÀÇ ¹®ÀÚÇü Æ÷ÀÎÅͰ¡ »ç¿ëÇÒ °ø°£À» ÇÒ´çÇϰí, ±× ÁÖ¼Ò°ª(Æ÷ÀÎÅÍ)¸¦ ¾ò¾î¿Í¾ß ÇÒ Â÷·Ê´Ù. ¿øÄ¢ÀûÀ¸·Î ÇÏÀÚ¸é, °¢ ¹®ÀÚ¿­ÀÇ Å©±â¸¸Å­ ´Ù¸£°Ô ÇÒ´çÇØ¾ß °ÚÀ¸³ª, ±×·¸°Ô ÇÏ¸é ±ÍÂúÀ¸´Ï, ¸ðµç ¹®ÀÚ¿­À» ³Ö±â¿¡ ÃæºÐÇÏ´Ù°í »ý°¢µÇ´Â 25byte ¸¦ µ¿ÀÏÇÏ°Ô ÇÒ´çÇØº¸µµ·Ï ÇϰڴÙ. for ·çÇÁ¹®À» ÀÌ¿ëÇÏ¸é °£´ÜÇÏ°Ô ÇÒ´çÇÒ ¼ö ÀÖ´Ù.
char **data 
data = malloc(sizeof(char *)*4); 
for (i = 0; i < 4; i++) 
{ 
    *data = malloc(sizeof(char) * 25); 
    *data++; 
} 
 

pointer_array.png

ÀÌ·¸°Ô ÇØ¼­ 25 byte ¸¸Å­ÀÇ °ø°£ÀÌ ÇÒ´çµÇ¾ú´Ù. ¸¸¾à 3Â÷¿ø Æ÷ÀÎÅͶó¸é 3¹øÀÇ ¸Þ¸ð¸® ÇÒ´çÀÌ ÀÌ·ç¾îÁ®¾ß ÇÒ°ÍÀÌ´Ù. ±×·±µ¥ ¼ÖÁ÷È÷ 2¹øÀÇ ¸Þ¸ð¸® ÇÒ´çÀÌ ÀÌ·ç¾îÁö´Â 2Â÷¿ø Æ÷ÀÎÅ͵µ ÀÌÇØÇϱⰡ ½±Áö ¾ÊÀ» °Çµ¥, 3Â÷¿ø Æ÷ÀÎÅ͸¦ ÀÌÇØÇϱâ¶õ Á¤¸» Èûµé °ÍÀÌ´Ù. ÇÁ·Î±×·¥À» ¸¸µé¶§´Â Ư¼öÇÑ °æ¿ì°¡ ¾Æ´Ï¸é °¡´ÉÇÑ "ÀÌÇØÇϱ⠽¬¿î ÄÚµå"¸¦ ÀÛ¼ºÇÏ´Â ¹æÇâÀ¸·Î °¡¾ß ÇÑ´Ù´Â Á¡¿¡¼­, 3Â÷¿ø ÀÌ»óÀÇ Æ÷ÀÎÅÍ´Â °í·ÁÇÏÁö ¾Ê´Â°Ô ÁÁÀ» °ÍÀÌ´Ù. ½ÇÁ¦·Î 3Â÷¿ø ÀÌ»óÀÇ Æ÷ÀÎÅ͸¦ º¼ ¼ö ÀÖ´Â °æ¿ì´Â °ÅÀÇ ¾øÀ» °ÍÀÌ´Ù. ÇÊÀÚ ¿ª½Ã 3Â÷¿ø Æ÷ÀÎÅ͸¦ »ç¿ëÇÑ ÇÁ·Î±×·¥À» º» ±â¾ïÀº °ÅÀÇ ¾ø´Ù.

¸Þ¸ð¸® »ó¿¡¼­ÀÇ ½ÇÁúÀûÀÎ µ¥ÀÌÅͰø°£ ÇҴ籸Á¶´Â ¾Æ·¡ ±×¸²°ú °°À» °ÍÀÌ´Ù.

point_array2.png

´ÙÀ½Àº ¿Ï¼ºµÈ ÇÁ·Î±×·¥ÀÌ´Ù. ÇÁ·Î±×·¥ÀÇ À̸§Àº point2.c·Î ÇϰڴÙ.
#include <unistd.h> 
 
int main() 
{ 
  char **data; 
  char **org; 
  int i; 
 
  data = (void *)malloc(sizeof(char *)*4);  // 4°³ÀÇ Æ÷ÀÎÅ͸¦ ÀúÀåÇϱâ À§ÇÑ ¸Þ¸ð¸® °ø°£ È®º¸ 
  org = data;                                              // ¿ø·¡ Æ÷ÀÎÅÍÀÇ ÁÖ¼Ò¸¦ ÀúÀåÇϱâ À§ÇÑ ¿ëµµ. 
  for (i = 0; i < 4; i++) 
  { 
    *data = malloc(sizeof(char)*25);  // °¢°¢ÀÇ Æ÷ÀÎÅÍ¿¡ ÃÖ´ë 25°³ÀÇ char µ¥ÀÌÅ͸¦ ÀúÀåÇϱâ À§ÇÑ 
    *data++;                                       // °ø°£À» È®º¸ÇÑ´Ù. 
  } 
 
  data = org; 
  strcpy(*data,"hello world!!\0"); 
 
  *data++; 
  strcpy(*data,"My name is yundream.\0"); 
 
  *data++; 
  strcpy(*data,"What's your name.\0"); 
 
  *data++; 
  strcpy(*data,"Thank you.\0"); 
 
  data = org; 
  for (i = 0; i < 4; i++) 
  { 
    printf("%s\n", *data); 
    *data++; 
  } 
} 
 

11 ÇÒ´çµÇÁö ¾ÊÀº Æ÷ÀÎÅÍ

±×·¸´Ù¸é ÇÒ´çµÇÁö ¾ÊÀº Æ÷ÀÎÅ͸¦ »ç¿ëÇÏ¸é ¾î¶»°Ô µÉ°¡. ÀÌÀüÀå¿¡¼­ °ªÀÌ ÇÒ´çµÇÁö ¾ÊÀº º¯¼ö´Â ¾Ë¼ö¾ø´Â °ªÀÌ µé¾îÀÖ´Ù´Â °ÍÀ» ¹è¿ü¾ú´Ù. ¸Þ¸ð¸®°ø°£À» ¿äû¹ÞÀº ¿î¿µÃ¼Á¦´Â ¸Þ¸ð¸® °ø°£¸¸ ÇÒ´çÇÏÁö, ±× ¸Þ¸ð¸® °ø°£À» 0 µîÀ¸·Î ÃʱâÈ­ ½ÃÄÑÁÖ´Â ÀÏÀº ÇÏÁö ¾Ê±â ¶§¹®ÀÌ´Ù.
¼±¾ð½Ã °ªÀ» ÃʱâÈ­ ½ÃÄÑÁÖ´Â °í¼öÁØ ¾ð¾îµé
Java, PHP, Perl µîÀÇ C º¸´Ù ³ôÀº ¼öÁØÀÇ ¾ð¾îµéÀº ¼±¾ð°ú µ¿½Ã¿¡ ÃʱâÈ­¸¦ ½ÃÄÑÁØ´Ù. ±×·¯³ª C´Â ÃʱâÈ­½ÃÄÑÁÖÁö ¾Ê´Â´Ù. int a; ¸¦ ¼±¾ðÇßÀ¸´Ï a¿¡´Â 0ÀÌ µé¾îÀÖÀ» °Å¶ó°í »ý°¢Çß´Ù°¡´Â ¹ö±×¸¦ °¡Áø ÇÁ·Î±×·¥À» ¸¸µé°Ô µÈ´Ù.

Æ÷ÀÎÅͺ¯¼öµµ ¸¶Âù°¡Áö·Î, ¾î¶² °ªÀ» °¡Áö°í ÀÖÀ»Áö ¾Ë¼ö ¾ø´Ù. ´Ù¸¥ µ¥ÀÌÅÍ Å¸ÀÔ¿¡ ºñÇØ¼­ ´õ¿í Ä¡¸íÀûÀΰÍÀº ÁÖ¼Ò°ªÀ» °¡Áö°í ÀÖ´Ù´Â Á¡ÀÌ´Ù. ¾Ë¼ö ¾ø´Â ÁÖ¼Ò°ªÀÌ µé¾îÀÖ´Ù´Â ¶æÀε¥, ÀÌ ÁÖ¼Ò°ªÀÌ ´Ù¸¥ ÇÁ·Î¼¼½º°¡ »ç¿ëÁßÀÎ ÁÖ¼Ò°ªÀÏ ¼ö Àֱ⠶§¹®ÀÌ´Ù. ¿©±â¿¡ µ¥ÀÌÅ͸¦ ÀúÀåÇÏ·Á°í ½ÃµµÇÒ°æ¿ì ÇÁ·Î±×·¥ÀÌ Á×¾î¹ö¸®°Ô µÈ´Ù. ±×·¯¹Ç·Î Æ÷ÀÎÅÍ´Â »ç¿ëÇϱâÀü¿¡ ¸Þ¸ð¸® °ø°£À» ÇÒ´çÇØ¾ß ÇÑ´Ù. ¾Æ·¡ÀÇ ÇÁ·Î±×·¥À» ÄÄÆÄÀÏÇÏ°í ½ÇÇà½ÃŰ¸é ºñÁ¤»ó Á¾·áµÇ¾î ¹ö¸± °ÍÀÌ´Ù.
int main() 
{ 
    char *data; 
    strcpy(data, "hello world\0"); 
} 
 
¹Ýµå½Ã malloc() ÇÔ¼öµîÀ» ÀÌ¿ëÇØ¼­, ¸Þ¸ð¸®¸¦ ÇÒ´ç¹Þ¾Æ¾ß µÈ´Ù.

12 ¼±¾ð½Ã Æ÷ÀÎÅÍÀÇ ÃʱâÈ­

int a; ¶ó´Â °ªÀ» ¼±¾ðÇÑ´Ù°í °¡Á¤ÇØ º¸ÀÚ. ±×³É ¼±¾ð¸¸ ÇÒ ¼öµµ ÀÖ°ÚÁö¸¸, ¾î¶² °ªÀÌ µé¾î°¡ ÀÖ´ÂÁö ¾Ë ¼ö ¾ø°í, ¶§¹®¿¡ À߸øµÈ ÇÁ·Î±×·¥À» ¸¸µé ¼öµµ ÀÖ´Ù. ¿¹¸¦µéÀÚ¸é ´ÙÀ½°ú °°Àº °æ¿ì´Ù.
int a; 
...  
... 
if (a ==0) 
{ 
   // ÀÌ·±Àú·± ÄÚµåµé 
   ... 
} 
 
a¿¡´Â ¾Ë ¼ö ¾ø´Â °ªÀÌ µé¾î°¡ ÀÖÀ¸¹Ç·Î À߸øµÈ °á°ú¸¦ Ãâ·ÂÇÒ °ÍÀÌ´Ù. ÀÌ·± ½Ç¼ö´Â ±×´ÙÁö ¸¹ÀÌ ¹ß»ýÇÏÁø ¾Ê°ÚÁö¸¸, ¹Ì¿¬¿¡ ¿¹¹æÇÏ´Â Â÷¿ø¿¡¼­ ÀϹÝÀûÀ¸·Î »ç¿ëÇÏ´Â °ªÀ¸·Î ÃʱâÈ­ ½ÃÄÑÁÙ Çʿ䰡 ÀÖ´Ù. int ÇüÀ̶ó¸é 0 ÀÌ µÉ°ÍÀÌ´Ù.
int a =0; 
float b = 0.0F; 
 

Æ÷ÀÎÅÍÀÇ °æ¿ì¿¡´Â NULLÀ̶ó´Â °ÍÀ» »ç¿ëÇÑ´Ù. À̰ÍÀº ÇÒ´çµÇÁö ¾Ê¾ÒÀ½À» ÀǹÌÇϴ Ű¿öµå·Î ´ÙÀ½°ú °°ÀÌ »ç¿ëµÉ ¼ö ÀÖ´Ù.
char *data = NULL; 
 
ÀÌ·¸°Ô NULL ·Î ÃʱâÈ­ ÇÒ°æ¿ì, Æ÷ÀÎÅ͸¦ »ç¿ëÇÒ¶§ ´ÙÀ½°ú °°ÀÌ Æ÷ÀÎÅͰªÀ» °Ë»çÇÔÀ¸·Î½á, Á»´õ robost(°ß°íÇÑ) ÇÁ·Î±×·¥À» ¸¸µé ¼ö ÀÖ°Ô µÈ´Ù.
char *data = NULL; 
if (data == NULL) 
{ 
    data = malloc(24); 
} 
strcpy(data, "hello world\0"); 
 

13 ¹®Á¦

  1. ¹è¿­°ú Æ÷ÀÎÅÍ´Â ¸Þ¸ð¸® ±¸Á¶ÀÇ À¯»ç¼ºÀ¸·Î °ÅÀÇ µ¿ÀÏÇÏ°Ô »ç¿ëÇÒ ¼ö ÀÖÀ½À» ¹è¿ü´Ù. ±×·¸´Ù¸é point2.c ÇÁ·Î±×·¥À» ¹è¿­À» »ç¿ëÇϵµ·Ï ¹Ù²Ù¾î º¸µµ·Ï ÇÏÀÚ.
EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù.