http://www.hackerschool.org/HS_Boards/zboard.php?id=Free_Lectures&no=7867 [º¹»ç]
C°¡ °·ÂÇÑ ÀÌÀ¯Áß Çϳª°¡ ÀÌ Æ÷ÀÎÅÍ ¶§¹®ÀÔ´Ï´Ù.
# Æ÷ÀÎÅÍ°¡ µµ´ëü ¹«¾ù?
Æ÷ÀÎÅÍÀÇ Á¤È®ÇÑ À̸§Àº 'Æ÷ÀÎÅÍÇü º¯¼ö' ÀÔ´Ï´Ù.
±×³É ÁÙ¿©¼ Æ÷ÀÎÅͶó°í ÇÏ´Â °ÍÀÌÁÒ.
±×·³ ¿©±â¼ Æ÷ÀÎÅÍ´Â º¯¼ö¶ó´Â°É ¾Æ¼Ì°ÚÁÒ?
º¯¼ö¿¡´Â Á¤¼ö ÇüÅÂ, ÀåÁ¤¼ö, ºÎµ¿ ¼Ò¼ýÁ¡ ¼ö, ¹®ÀÚ ÇüÅ µîµîÀÌ
ÀÖ½À´Ï´Ù. ±×·³ Æ÷ÀÎÅÍ´Â µµ´ëü ¾î¶² ÇüÅ Àϱî¿ä?
Æ÷ÀÎÅÍ´Â ¹Ù·Î ÁÖ¼Ò ÇüÅ ÀÔ´Ï´Ù. ±×·¯´Ï±î Á¤¼öµµ ¾Æ´Ï°í,
¹®ÀÚµµ ¾Æ´Ñ ¸Þ¸ð¸®ÀÇ ÁÖ¼Ò¸¦ ±â¾ï½ÃÅ°´Â º¯¼ö¶ó´Â °ÍÀÌÁÒ.
Æ÷ÀÎÅÍ´Â º¯¼öÀÌ°í, º¯¼ö Áß¿¡¼µµ ÁÖ¼Ò¸¦ ±â¾ï½ÃÅ°±â À§ÇÑ
º¯¼ö¶ó´Â °ÍÀ» ²À ±â¾ïÇØ µÎ½Ã¸é ´ÙÀ½Àº Àß ÀÌÇØ°¡ µÇ½Ç °Ì´Ï´Ù.
# Æ÷ÀÎÅÍ´Â ¾î¶»°Ô? ¼±¾ðÀ»..
º¯¼ö´Â »ç¿ëÀü¿¡ ¼±¾ðÀ» ÇØ ÁÖ¾î¾ß ÇÕ´Ï´Ù.
Æ÷ÀÎÅÍ ¿ª½Ã º¯¼ö À̹ǷΠ¼±¾ðÀ» ÇØ ÁÖ¾î¾ß ÇÏ°ÚÁÒ?
Æ÷ÀÎÅÍÀÇ ¼±¾ðÀº ´ÙÀ½°ú °°ÀÌ ÇÕ´Ï´Ù.
7
µ¥ÀÌÅÍÇüÅÂ* Æ÷ÀÎÅÍÀ̸§;
¾Æ±î Æ÷ÀÎÅÍ´Â ÁÖ¼Ò¸¦ ±â¾ï½ÃÅ°´Â º¯¼ö¶ó°í Çß½À´Ï´Ù.
±×·±µ¥ ÁÖ¼Ò¿¡µµ Á¾·ù°¡ ÀÖÁÒ?
Á¤¼ö ÇüÅ º¯¼öÀÇ ÁÖ¼Ò, ¹®ÀÚ ÇüÅ º¯¼öÀÇ ÁÖ¼Ò µîµî..
ÀÌ·± ¾î¶² ÇüÅÂÀÇ ÁÖ¼ÒÀÎÁö¸¦ ÁöÁ¤ÇØ ÁÖ´Â °ÍÀÌ µ¥ÀÌÅÍÇüÅ ÀÔ´Ï´Ù.
¸¸¾à ÁÖ¼ÒÀÇ ÇüÅ°¡ Ưº°È÷ Á¤ÇØÁ® ÀÖÁö ¾Ê¾Ò´Ù¸é void¸¦ ¾¸´Ï´Ù.
void¸¦ ½á¼ Æ÷ÀÎÅ͸¦ ¼±¾ðÇÏ¸é ¾î¶² ÇüÅÂÀÇ ÁÖ¼ÒµçÁö ³ÖÀ»¼ö ÀÖÁÒ.
±×¸®°í *´Â ±× º¯¼ö°¡ Æ÷ÀÎÅÍÀÓÀ» ¾Ë¸®±â À§ÇØ ½á ÁÖ´Â °ÍÀÌ°í,
Æ÷ÀÎÅÍÀ̸§Àº ±× Æ÷ÀÎÅ͸¦ »ó¡ÇÏ´Â ½Éº¼ÀÔ´Ï´Ù.
¿¹¸¦ µé¾î Á¤¼ö ÇüÅÂÀÇ º¯¼öÀÇ ÁÖ¼Ò¸¦ ³Ö´Â Æ÷ÀÎÅÍ´Â
int* Pointer;
ÀÌ·¸°Ô ¼±¾ðÇÕ´Ï´Ù.
Æ÷ÀÎÅÍ ¼±¾ð½Ã *ÀÇ À§Ä¡´Â µ¥ÀÌÅÍÇüÅÂ¿Í Æ÷ÀÎÅÍÀ̸§ »çÀÌ¿¡¶ó¸é
¾î´À °÷¿¡ ¿Íµµ »ó°ü ¾ø½À´Ï´Ù.
¿¹¸¦ µé¾î ¾Æ±î Pointer¶ó´Â º¯¼ö´Â
int * Pointer;
ÀÌ·¸°Ô ¼±¾ðÇصµ µÇ°í,
int *Pointer;
ÀÌ·¸°Ô ¼±¾ðÇصµ »ó°ü ¾ø½À´Ï´Ù.
# Æ÷ÀÎÅÍ ¿¬»êÀÚ
C¾ð¾î ¿¡¼´Â Æ÷ÀÎÅÍ »ç¿ë½Ã¿¡ »ç¿ëÇÏ´Â ¿¬»êÀÚ°¡
2°¡Áö°¡ ÀÖ½À´Ï´Ù. ±× µÎ°¡Áö´Â ±âÁ¸ÀÇ ºñÆ®º° ³í¸®°ö ¿¬»êÀÚÀÎ
&¿Í °ö¼À ¿¬»êÀÚÀÎ *ÀÔ´Ï´Ù.
Æ÷ÀÎÅÍ ¿¬»êÀÚ·Î ¾²À϶§ &´Â ÁÖ¼Ò ¿¬»êÀÚ¶ó°í ÇÏ°í,
*´Â ÂüÁ¶ ¿¬»êÀÚ¶ó°í ÇÕ´Ï´Ù.
(1) ÁÖ¼Ò ¿¬»êÀÚ
ÁÖ¼Ò ¿¬»êÀÚ(&)¶õ ¾î¶² º¯¼öÀÇ ÁÖ¼Ò¸¦ ¾ò´Â ¿¬»êÀÚ¸¦ ¸»ÇÕ´Ï´Ù.
»ç¿ë¹ýÀº ÁÖ¼Ò¸¦ ¾ò°íÀÚ ÇÏ´Â º¯¼öÀÇ ¾Õ¿¡ &¸¦ ºÙ¿© Áֱ⸸ ÇÏ¸é µÊ´Ï´Ù.
±×·¯´Ï±î
Æ÷ÀÎÅÍ = &º¯¼ö;
ÀÌ·¸°Ô ÇÏ¸é º¯¼öÀÇ ÁÖ¼Ò°¡ Æ÷ÀÎÅÍ¿¡ µé¾î°¡ÁÒ.
¿¹¸¦ µé¾î
int Variable=10;
int *Pointer;
ÀÌ·¸°Ô µÎ º¯¼ö¸¦ ¼±¾ðÇß´Ù°í ÇÒ¶§,
Pointer = &Variable;
ÀÌ·¸°Ô ÇØ ÁÖ¸é Variable¶ó´Â º¯¼öÀÇ ÁÖ¼Ò°¡ Pointer¶ó´Â º¯¼ö·Î µé¾î°©´Ï´Ù.
ÀÌ°ÍÀ» ½ÇÁ¦ ¸Þ¸ð¸® »óÀÇ ±¸Á¶¸¦ ÅëÇØ ´Ù½ÃÇѹø »ìÆ캸ÁÒ.
óÀ½¿¡
int Variable=10;
int *Pointer;
ÀÌ·¸°Ô º¯¼ö¸¦ ¼±¾ðÇÒ ´ç½Ã´Â
º¯¼öÀ̸§ | Variable Pointer
ÁÖ¼Ò | 1 2 3 4 . . .
---------+--------------------------------------------
°ª | 10 ? ? ?
´ÙÀ½°ú °°Àº ¸Þ¸ð¸® ±¸Á¶¸¦ °®½À´Ï´Ù.
¿©±â¼ Variable¶ó´Â º¯¼ö´Â ½ÇÀç ¸Þ¸ð¸® ÁÖ¼Ò 1À» ÇÒ´ç¹Þ¾Ò´Ù°í ÇÏ°í,
Pointer¶ó´Â º¯¼ö´Â ½ÇÀç ¸Þ¸ð¸® ÁÖ¼Ò 3À» ÇÒ´ç¹Þ¾Ò´Ù°í ÇսôÙ.
´ÙÀ½¿¡
Pointer = &Variable;
ÀÌ·¸°Ô Çϸé Pointer¶ó´Â º¯¼ö¿¡ VariableÀÇ ÁÖ¼ÒÀÎ 1ÀÌ µé¾î°¡¼
º¯¼öÀ̸§ | Variable Pointer
ÁÖ¼Ò | 1 2 3 4 . . .
---------+--------------------------------------------
°ª | 10 ? 1 ?
ÀÌ·¸°Ô µÊ´Ï´Ù.
(2) ÂüÁ¶ ¿¬»êÀÚ
Æ÷ÀÎÅÍ´Â ÁÖ¼Ò¸¦ ±â¾ï½ÃÅ°´Â º¯¼ö¶ó´Â °ÍÀ» ÀÌ¹Ì ¹è¿ü½À´Ï´Ù.
±×·¸´Ù¸é ±× ±â¾ï½ÃÅ°°í ÀÖ´Â ÁÖ¼Ò¿¡ ±â¾ïµÇ¾î ÀÖ´Â °ªÀ» »ç¿ëÇϰųª
´Ù¸¥ °ªÀ¸·Î ¹Ù²Ü¶© ¾î¶»°Ô ÇÒ±î¿ä? ±×¶§ ÂüÁ¶ ¿¬»êÀÚÀÎ *¸¦ »ç¿ë ÇÕ´Ï´Ù.
»ç¿ë¹ýÀº
*Æ÷ÀÎÅÍ = °ª;
º¯¼ö = *Æ÷ÀÎÅÍ;
ÀÌ·± ½ÄÀ¸·Î »ç¿ëÇÏÁÒ.
ù¹ø°ÀÇ °æ¿ì Æ÷ÀÎÅÍ¿¡ ÀúÀåµÇ¾î ÀÖ´Â ÁÖ¼Ò¿¡ °ªÀ» ³Ö¾î ÁÜ´Ï´Ù.
µÎ¹ø°ÀÇ °æ¿ì´Â Æ÷ÀÎÅÍ¿¡ ÀúÀåµÇ¾î ÀÖ´Â ÁÖ¼Ò¿¡ ±â¾ïµÇ¾î ÀÖ´Â °ªÀ»
º¯¼ö·Î ³Ö¾î ÁÖ°Ô µÇ°ÚÁÒ?
¿¹¸¦ µé¾î..
int Var1=10, Var2;
int *Pointer;
ÀÌ·¸°Ô ¼¼°³ÀÇ º¯¼ö¸¦ ¼±¾ðÇß°í,
Pointer = &Var1;
ÀÌ·¸°Ô Pointer¿¡ Var1ÀÇ ÁÖ¼Ò¸¦ ³Ö¾ú´Ù°í ÇսôÙ.
À̶§
*Pointer=5;
ÀÌ·¸°Ô ÇØ ÁÖ¸é Pointer¿¡ ÀúÀåµÇ¾î ÀÖ´Â ÁÖ¼Ò Áï
Var1À̶ó´Â º¯¼öÀÇ ÁÖ¼Ò¿¡ 5¸¦ ³Ö¾î ÁֹǷΠ°á±¹¿¡´Â Var1Àº 5°¡ µÊ´Ï´Ù.
±× ´ÙÀ½À¸·Î
Var2=*Pointer;
ÀÌ·¸°Ô Çß´Ù¸é Pointer¿¡ ÀúÀåµÇ¾î ÀÖ´Â ÁÖ¼Ò¿¡ µé¾îÀÖ´Â °ª,
Áï Var1¶ó´Â º¯¼öÀÇ ÁÖ¼Ò¿¡ µé¾îÀÖ´Â °ªÀÎ 5°¡ Var2¿¡µµ µé¾î°¡
Var1, Var2°¡ ¸ðµÎ 5°¡ µÇÁÒ.
ÀÌ°É ½ÇÀç ¸Þ¸ð¸® ±¸Á¶¸¦ º¸¸ç ´Ù½ÃÇѹø »ìÆì º¼±î¿ä?
óÀ½¿¡
int Var1=10, Var2;
int *Pointer;
ÀÌ·¸°Ô ¼¼°³ÀÇ º¯¼ö¸¦ ¼±¾ðÇÒ ´ç½Ã´Â
º¯¼öÀ̸§ | Var1 Var2 Pointer
ÁÖ¼Ò | 1 2 3 4 . . .
---------+--------------------------------------------
°ª | 10 ? ? ?
´ÙÀ½°ú °°Àº ¸Þ¸ð¸® ±¸Á¶¸¦ °®´Âµ¥,
¿©±â¼ Var1¶ó´Â º¯¼ö´Â ½ÇÀç ¸Þ¸ð¸® ÁÖ¼Ò 1À» ÇÒ´ç¹Þ¾Ò°í,
Var2¶ó´Â º¯¼ö´Â ½ÇÀç ¸Þ¸ð¸® ÁÖ¼Ò 2¸¦, Pointer¶ó´Â º¯¼ö´Â
¸Þ¸ð¸® ÁÖ¼Ò 4À» ÇÒ´ç¹Þ¾Ò´Ù°í ÇսôÙ.
À̶§
Pointer = &Var1;
ÀÌ·¸°Ô Pointer¶ó´Â º¯¼ö¿¡ Var1ÀÇ ÁÖ¼ÒÀÎ 1À» ³Ö¾îÁÖ¸é
º¯¼öÀ̸§ | Var1 Var2 Pointer
ÁÖ¼Ò | 1 2 3 4 . . .
---------+--------------------------------------------
°ª | 10 ? ? 1
ÀÌ·¸°Ô µÇ°ÚÁÒ?
±×¸®°í ´ÙÀ½À¸·Î
*Pointer=5;
ÀÌ·¸°Ô ÇØ ÁÖ¸é Pointer¿¡ ±â¾ïµÇ¾î ÀÖ´Â ÁÖ¼Ò Áï 1À̶ó´Â ÁÖ¼Ò¿¡
5¸¦ ³Ö¾î ÁÖ¾î
º¯¼öÀ̸§ | Var1 Var2 Pointer
ÁÖ¼Ò | 1 2 3 4 . . .
---------+--------------------------------------------
°ª | 5 ? ? 1
ÀÌ·¸°Ô µÊ´Ï´Ù. ±×·¯¹Ç·Î Var1ÀÇ °ªÀº 5·Î ¹Ù²î°Ô µÊ´Ï´Ù.
¸¶Áö¸·À¸·Î
Var2=*Pointer;
ÀÌ·¸°Ô Çϸé Pointer¿¡ ÀúÀåµÇ¾î ÀÖ´Â ÁÖ¼Ò
Áï 1À̶ó´Â ÁÖ¼Ò¿¡ µé¾îÀÖ´Â °ªÀÎ 5°¡ Var2¿¡µµ µé¾î°¡
º¯¼öÀ̸§ | Var1 Var2 Pointer
ÁÖ¼Ò | 1 2 3 4 . . .
---------+--------------------------------------------
°ª | 5 5 ? 1
ÀÌ·¸°Ô Var1°ú Var2¿¡ ¸ðµÎ 5°¡ µé¾î°¡°Ô µÇÁÒ.
# Æ÷ÀÎÅÍ¿¡ ÃʱⰪ ÁÖ±â.
º¯¼ö´Â ¼±¾ð½Ã¿¡ ÃʱⰪÀ» ÁÙ¼ö ÀÖ¾úÁÒ?
±×·±µ¥ Æ÷ÀÎÅ͵µ º¯¼öÀ̹ǷΠ´ç¿¬È÷ ÃʱⰪÀ» ÁÙ¼ö ÀÖ°ÚÁÒ?
Æ÷ÀÎÅÍ¿¡ ÃʱⰪÀ» ÁÖ´Â ¹æ¹ýÀº ÀÏ¹Ý º¯¼ö¿Í ¶È°°½À´Ï´Ù.
±×·¯´Ï±î
int* Pointer=1;
ÀÌ·¸°Ô Çϸé 1À̶ó´Â ÁÖ¼Ò¸¦ ÃʱⰪÀ¸·Î ÁØ °ÍÀÌÁÒ.
±×·±µ¥ ¹º°¡ ÀÌ»óÇÏÁÒ?
ÁÖ¼Ò´Â Àڱ⠸¶À½µ¥·Î Á¤ÇÏ´Â°Ô ¾Æ´Ï°Åµç¿ä.
±×·¡¼ Àú·¸°Ô ¼±¾ðÇÏ´Â »ç¶÷À» '¹Ùº¸'¶ó°í ÇÏÁÒ.
ÀϹÝÀûÀ¸·Î Æ÷ÀÎÅÍ¿¡ ÃʱⰪÀ» ÁÙ ¶§´Â
µ¥ÀÌÅÍÇü º¯¼ö;
µ¥ÀÌÅÍÇü* Æ÷ÀÎÅÍÀ̸§ = &º¯¼ö;
ÀÌ·¸°Ô ÇÕ´Ï´Ù.
¿ì¼± º¯¼ö¸¦ ¼±¾ðÇÏ°í ±× º¯¼öÀÇ ÁÖ¼Ò¸¦ ÃʱⰪÀ¸·Î ÁÖ´Â °ÍÀÌÁÒ.
¿¹¸¦ µé¾î
int Variable;
int* Pointer=&Variable;
ÀÌ·¸°Ô Çϸé Variable¶ó´Â º¯¼öÀÇ ÁÖ¼Ò°¡ Pointer¶ó´Â Æ÷ÀÎÅÍ¿¡
ÃʱⰪÀ¸·Î µé¾î°©´Ï´Ù.
# ´Ù½ÃÇѹø Æ÷ÀÎÅÍ¿¡ ´ëÇØ Á¤¸®.
Æ÷ÀÎÅÍ¿¡ ´ëÇØ ´Ù½ÃÇѹø Á¤¸®¸¦ ÇØ º¸ÁÒ.
¿ì¼± Æ÷ÀÎÅÍ´Â º¯¼öÀÌ°í, º¯¼ö Áß¿¡¼µµ ÁÖ¼Ò¸¦ ±â¾ï½ÃÅ°´Â º¯¼ö ÀÔ´Ï´Ù.
Æ÷ÀÎÅÍ ¼±¾ðÀº
µ¥ÀÌÅÍÇüÅÂ* Æ÷ÀÎÅ͸í;
ÀÌ·¸°Ô ÇØ ÁÖ¸é µÇ°í, ¿©±â¼ µ¥ÀÌÅÍÇüÅ´ ±× Æ÷ÀÎÅÍ°¡ ¾î¶² ÇüÅÂÀÇ
º¯¼öÀÇ ÁÖ¼Ò¸¦ ³Ö´Â °ÍÀÎÁö¸¦ ÁöÁ¤ÇÏ´Â °ÍÀ̾úÁÒ?
´ÙÀ½À¸·Î Æ÷ÀÎÅÍ ¿¬»êÀÚ¿¡´Â ÁÖ¼Ò ¿¬»êÀÚ(&)¿Í, ÂüÁ¶ ¿¬»êÀÚ(*)°¡ Àִµ¥,
ÁÖ¼Ò ¿¬»êÀÚ´Â ¾î¶² º¯¼öÀÇ ½ÇÁ¦ ÁÖ¼Ò¸¦ ¾ò°íÀÚ ÇÒ¶§ »ç¿ëÇÏ´Â °ÍÀ¸·Î
ÁÖ¼Ò¸¦ ¾ò°íÀÚ ÇÏ´Â º¯¼ö ¾Õ¿¡ ºÙ¿© Áֱ⸸ ÇÏ¸é µÇ°í¿ä.
ÂüÁ¶ ¿¬»êÀÚ´Â Æ÷ÀÎÅÍ¿¡ ÀúÀåµÇ¾î ÀÖ´Â ÁÖ¼Ò¿¡ ±â¾ïµÇ¾î ÀÖ´Â
µ¥ÀÌÅ͸¦ º¯°æ½ÃÅ°°Å³ª »ç¿ëÇÒ¶§ ¾²´Â °ÍÀ¸·Î, Æ÷ÀÎÅÍÀÇ ¾Õ¿¡
ºÙ¿© Áֱ⸸ ÇÏ¸é µÊ´Ï´Ù.
¿¹¸¦ µé¾î
int Variable;
int* Pointer;
ÀÌ·¸°Ô º¯¼ö µÎ°³°¡ ÀÖÀ»¶§,
Pointer=&Variable;
ÀÌ·¸°Ô Çϸé Pointer¶ó´Â Æ÷ÀÎÅÍ¿¡´Â Variable¶ó´Â º¯¼öÀÇ
ÁÖ¼Ò°¡ µé¾î°¡°í
*Pointer=10;
ÀÌ·¸°Ô Çϸé Pointer¿¡ µé¾îÀÖ´Â ÁÖ¼Ò Áï VariableÀÇ ÁÖ¼Ò¿¡ µé¾îÀÖ´Â
°ªÀÌ º¯°æµÇ¹Ç·Î °á±¹Àº Variable°¡ º¯°æµÇ¾î 10ÀÌ µé¾î°¡°Ô µÇÁÒ.
¸¶Áö¸·À¸·Î Æ÷ÀÎÅÍ¿¡ ÃʱⰪÀ» ÁÙ¶§´Â ÀÏ¹Ý º¯¼ö¿Í ¶È°°À¸³ª
ÁÖ¼Ò´Â ¸¶À½µ¥·Î Á¤ÇÏ´Â °ÍÀÌ ¾Æ´Ï¹Ç·Î ÀϹÝÀûÀ¸·Î
ÀÏ´Ü º¯¼ö¸¦ ¼±¾ðÇÏ°í Æ÷ÀÎÅÍ¿¡´Â ±× º¯¼öÀÇ ÁÖ¼Ò¸¦ ÃʱⰪÀ¸·Î ÁÝ´Ï´Ù.
¿¹¸¦ µé¾î
int Variable;
int* Pointer=&Variable;
ÀÌ·± ½ÄÀ¸·Î.
±×·³ ¿¹Á¦¸¦ Çϳª º¸ÁÒ.
/* ÆÄÀÏ À̸§ : C9-1.C
ÇÁ·Î±×·¥ ³»¿ë : Æ÷ÀÎÅÍ ¿¹Á¦. */
#include <stdio.h>
void main()
{
int Var1, Var2;
int *pVar=&Var1;
*pVar=10;
printf("%d\n",Var1);
Var2=*pVar;
printf("%d\n",Var2);
pVar=&Var2;
*pVar=5;
printf("%d\n",Var2);
}
Çѹø Àß ºÐ¼®ÇØ º¸¼¼¿ä. ¾î¶² °á°ú°¡ ³ª¿Ã±î¿ä?
°á°ú´Â
C:\>C9-1.EXE
10
10
5
[Ãâó] Á¦Æ®½ºÀ® ºí·Î±× - http://www.zetswing.com
|
Hit : 9237 Date : 2013/05/06 02:36
|