À̹ø °Á ¿¡¼´Â Æ÷ÀÎÅÍ¿Í ¹è¿ÀÇ °ü°è¿Í
ÇÔ¼ö Æ÷ÀÎÅÍ,±×¸®°í ±¸Á¶Ã¼¿¡ ´ëÇØ¼µµ
¾Ë¾Æº¸°Ú½À´Ï´Ù.
# ¹è¿ÀÌ ÀÌ»óÇÏ´Ù?
¹è¿À» »ç¿ëÇÏ´Ù°¡ º¸¸é ÀÌ»óÇÑ Á¡À» ¸¹ÀÌ ¹ß°ßÇϼÌÀ» °Ì´Ï´Ù.
¿¹¸¦ µé¾î scanfÇÔ¼ö·Î Á¤¼ö º¯¼ö¿¡ ¾î¶² Á¤¼ö¸¦
ÀÔ·Â ¹ÞÀ»¶©
int Var;
scanf("%d",&Var);
ÀÌ·¸°Ô ÇßÁÒ? ±×·±µ¥ ¹®Àڹ迿¡ ¹®ÀÚ¿À»
ÀÔ·Â ¹ÞÀ»¶©
char Var[100];
scanf("%s",Var);
ÀÌ·¸°Ô Çß½À´Ï´Ù. ¿Ö ¹®Àڹ迿¡ ¹®ÀÚ¿À»
ÀÔ·Â ¹ÞÀ»¶©
scanf("%s",&Var);
ÀÌ·¸°Ô &¸¦ ºÙÀÌÁö ¾Ê¾ÒÀ»±î¿ä?
±×¸®°í ÇÔ¼ö¿¡ °ªÀ» Àü´ÞÇÒ¶§ ¹è¿À» Àü´ÞÇÏ¸é ¿Ö Call by reference·Î
Àü´Þ µÇ¾úÀ»±î¿ä? Á¤¸» ±Ã±ÝÇϽÃÁö ¾Ê½À´Ï±î?
ÀÌÀ¯´Â ¹è¿¸íÀÌ Æ÷ÀÎÅÍÀ̱⠶§¹®ÀÌÁÒ.
±×·¯´Ï±î ¹è¿¸íÀº ¹è¿ÀÇ Ã¹¹øÂ° ¿ø¼ÒÀÇ ÁÖ¼Ò¸¦ °¡Áö°í ÀÖ´Â Æ÷ÀÎÅÍ ÀÔ´Ï´Ù.
´Ü ±× ÁÖ¼Ò¸¦ ¹Ù²Ü¼ö ¾øÀ¸¹Ç·Î Æ÷ÀÎÅÍ Áß¿¡¼
»ó¼ö Æ÷ÀÎÅͶó°í ÇÏ¸é µÇ°ÚÁÒ?
# ¶Ç´Ù¸¥ ¹æ¹ýÀÇ ¹è¿ »ç¿ë.
¿ì¼± ¿¹Á¦¸¦ º¸ÁÒ.
/* ÆÄÀÏ À̸§ : C10-1.C
ÇÁ·Î±×·¥ ³»¿ë : Æ÷ÀÎÅÍ¿Í ¹è¿ ¿¹Á¦. */
#include <stdio.h>
void main()
{
int array[10]={ 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
int var;
var=*array;
printf("%d\n",var);
}
ÀÌ ¿¹Á¦¿¡¼ array¶ó´Â ¹è¿¿¡ ÂüÁ¶ ¿¬»êÀÚ¸¦
ºÙ¿©¼
var=*array;
ÀÌ·¸°Ô Çߴµ¥, ±×·³ var¿¡´Â ¾î¶² °ªÀÌ µé¾î°¥±î¿ä?
¾Æ±î ¹è¿¸íÀÌ ¹è¿ÀÇ Ã¹¹øÂ° ¿ø¼Ò¸¦ °¡¸£Å°°í ÀÖ´Â Æ÷ÀÎÅͶó°í Çß½À´Ï´Ù.
±×·¯¹Ç·Î ù¹øÂ° ¿ø¼ÒÀÇ °ªÀÎ 1ÀÌ var¿¡ µé¾î°¡°ÚÁÒ?
±×·¯¹Ç·Î 1ÀÌ Ãâ·ÂµÊ´Ï´Ù.
±×·³ ¸¸¾à µÎ¹øÂ° ¿ø¼ÒÀÇ °ªÀ» var¿¡ ³Ö°í ½Í´Ù¸é ¾î¶»°Ô ÇÒ±î¿ä?
¹°·Ð
var=array[1];
ÀÌ·¸°Ô ÇØµµ µÇ°ÚÁö¸¸, Æ÷ÀÎÅ͸¦ ÀÌ¿ëÇÑ ¹æ¹ýÀ¸·Î¿ä.
µÎ¹øÂ° ¿ø¼Ò´Â ù¹øÂ° ¿ø¼Ò ÁÖ¼ÒÀÇ ´ÙÀ½ ÁÖ¼Ò¿¡ µé¾îÀÖ½À´Ï´Ù.
±×·¯¹Ç·Î ù¹øÂ° ¿ø¼ÒÀÇ ÁÖ¼Ò¿¡ 1À» ´õÇØÁØ ÁÖ¼Ò¿¡ µé¾îÀÖ°ÚÁÒ?
±×·¡¼
var=*(array+1);
ÀÌ·¸°Ô ÇØ ÁÖ¸é µÊ´Ï´Ù. ±×·±µ¥ intÇüÅ´ 2¹ÙÀÌÆ®ÀÌÁÒ?
±×·³ 2¸¦ ´õÇØ¾ß Çϴµ¥, 1¸¸ ´õÇØ¼ 2¹øÂ° ¿ø¼Ò¸¦ ÀÐÀ»¼ö ÀÖÀ»±î¿ä?
CÄÄÆÄÀÏ·¯´Â À̰ÍÀ» ¾Ë¾Æ¼ °è»êÇØ 1À» ´õÇßÁö¸¸ ½ÇÀç·Î´Â 2¸¦ ´õÇØ ÁÜ´Ï´Ù.
±×·¯¹Ç·Î ÇÁ·Î±×·¥ »ó¿¡¼´Â 1¸¸ ´õÇØ ÁÖ¾î¾ß ÇÏÁÒ.
¸¸¾à ¼¼¹øÂ° ¿ø¼Ò¸¦ var¿¡ ³Ö´Â ´Ù¸é
var=*(array+2);
ÀÌ·¸°Ô ÇÏ¸é µÇ°ÚÁÒ?
ÀÌ·¸°Ô Çϸé ÄÄÆÄÀÏ·¯°¡ ¾Ë¾Æ¼ 2°¡ ¾Æ´Ñ 4¸¦ ´õÇØ ÁÖ°Ô µÊ´Ï´Ù.
´Ù½ÃÇѹø Á¤¸®Çϸé
*(array+0)˼ array[0]
*(array+1)˼ array[1]
*(array+2)´Â array[2]
.
.
ÀÌ·¸°Ô µÇ´Â °ÍÀÌÁÒ.
# Æ÷ÀÎÅÍ·Î ¹®ÀÚ¿ 󸮸¦?
¹®ÀÚ¿À» ¹è¿ï¶§ Æ÷ÀÎÅͷεµ ¹®ÀÚ¿À» ó¸®ÇÒ¼ö ÀÖ´Ù°í ¹è¿ü½À´Ï´Ù.
±×·±µ¥ ±× ¹æ¹ýÀº ¾ÆÁ÷ ¹è¿ìÁö ¾Ê¾ÒÁÒ?
±×°É Áö±Ý ¼³¸íµå¸®µµ·Ï ÇϰڽÀ´Ï´Ù.
»ç½Ç Æ÷ÀÎÅͷδ ¹®ÀÚ¿À» ó¸®ÇѴٱ⠺¸´Ù ±×³É Áö½ÃÇÑ´Ù°í
Ç¥ÇöÇÏ´Â °ÍÀÌ ÁÁÀ»°Í °°±º¿ä. ÇÏ¿©Æ° Àß ÀÐ¾î º¸¼¼¿ä.
¹è¿Àº Æ÷ÀÎÅÍ »ó¼öÀÔ´Ï´Ù.
±×·¡¼ ¹®Àڹ迿¡ ¹®ÀÚ¿À» ³ÖÀ»¶§´Â ¹Ýµå½Ã strcpyÇÔ¼ö¸¦
½á¾ß¸¸ ÇÏÁÒ. ¿¹¸¦ µé¾î
char Str[10];
ÀÌ·± ¹®ÀÚ ¹è¿ÀÌ ÀÖÀ»¶§
strcpy(Str,"String");
ÀÌ·±°Ç °¡´ÉÇßÁö¸¸
Str="String";
ÀÌ·±°Ç ºÒ°¡´É ÇÏÁÒ. ÀÌ·¸°Ô ÇÏ¸é »ó¼ö¿¡ °ªÀ» ³Ö´Â °ÍÀ̹ǷÎ
°á±¹¿¡´Â
120=2048;
ÀÌ·±°Å³ª ´Ù¸§ ¾ø°Åµç¿ä.
±×·¸Áö¸¸ StrÀ» ¹®ÀÚ¹è¿ÀÌ ¾Æ´Ñ Æ÷ÀÎÅÍ·Î ¼±¾ðÇÏ¸é ¾î¶»°Ô µÉ±î¿ä?
Áï
char *Str;
ÀÌ·¸°Ô ¸»ÀÌÁÒ. ÀÌ·¸°Ô Çϸé StrÀº »ó¼ö°¡ ¾Æ´Ñ
º¯¼ö°¡ µÇ¹Ç·Î
Str="String";
ÀÌ·±°Ô °¡´ÉÇÕ´Ï´Ù. ÇÏÁö¸¸ ÀÌ°Ç ´Ü¼øÈ÷ "String"¶ó´Â ¹®ÀÚ¿ »ó¼ö°¡
±â¾ïµÇ¾î ÀÖ´Â ÁÖ¼Ò¸¦ Str¿¡ ³Ö¾î ÁØ °ÍÀÌÁÒ.
¹®Àڹ迷Π¼±¾ðÇßÀ»¶§´Â "String"¶ó´Â ¹®ÀÚ¿À» ³ÖÀ» °ø°£ÀÌ
È®º¸µÇ¾î ÀÖÀ¸¹Ç·Î strcpy·Î ¹®ÀÚ¿À» ³Ö´Â°ÍÀÌ °¡´ÉÇÏÁö¸¸,
Æ÷ÀÎÅÍ·Î ¼±¾ðÇÑ°Ç ¹®ÀÚ¿À» ³ÖÀ» °ø°£Àº È®º¸ÇÏÁö ¾Ê°í
´ÜÁö ¹®ÀÚ¿ÀÌ ÀÖ´Â ÁÖ¼Ò¸¦ ³ÖÀ» °ø°£¸¸ È®º¸ÇÒ »ÓÀÔ´Ï´Ù.
±×·¯¹Ç·Î StrÀÌ Æ÷ÀÎÅÍ·Î ¼±¾ðµÈ °ÍÀ̶ó¸é
strcpy(Str,"String");
ÀÌ·¸°Ô ÇÒ °æ¿ì À߸øÇÏ´Ù°£ ´Ù¿îÀÌ µÇ¹ö¸®ÁÒ.
±×·¡¼ Æ÷ÀÎÅͷδ ¹®ÀÚ¿ 󸮸¦ ÇÏÁö ¸øÇÏ°í ´ëºÎºÐ
¹®ÀÚ¿À» Áö½ÃÇÒ¶§ ¾²ÀÌ´Â °Í ÀÔ´Ï´Ù.
# ÇÔ¼ö Æ÷ÀÎÅÍ
Áö±Ý±îÁö ¹è¿î Æ÷ÀÎÅÍ´Â ¾î¶² º¯¼öÀÇ ÁÖ¼Ò¸¦ ±â¾ï½ÃŰ´Â Æ÷ÀÎÅÍ¿´½À´Ï´Ù.
±×·±µ¥ ÇÔ¼öÀÇ ÁÖ¼Ò¸¦ ±â¾ï½ÃŰ´Â Æ÷ÀÎÅÍ´Â ¾øÀ»±î¿ä?
´ç¿¬È÷ ÀÖÁÒ. ±×·±µ¥ Áö±Ý±îÁö ¹è¿î Æ÷ÀÎÅͿʹ ¼±¾ðºÎÅÍ »ç¿ë±îÁö
¹æ¹ýÀÌ Á¶±Ý ´Ù¸¨´Ï´Ù. Áö±ÝºÎÅÍ ÀÌ°É ¾Ë¾Æº¼²«µ¥
ÀÌ°É ¹è¿ì±â Àü¿¡ ¿ì¼± ÇѰ¡Áö ¾Ë¾ÆµÎ½Ç °ÍÀÌ ÀÖ½À´Ï´Ù.
¾Æ±î ¹è¿¸íÀÌ »ó¼ö Æ÷ÀÎÅͶó°í Çߴµ¥, ÇÔ¼ö¸íµµ ¹Ù·Î »ó¼ö Æ÷ÀÎÅÍ ÀÔ´Ï´Ù.
Áï ÇÔ¼öÀÇ ½ÃÀÛ ÁÖ¼Ò¸¦ ±â¾ïÇϰí ÀÖ´Â »ó¼ö
Æ÷ÀÎÅÍ ÀÌÁÒ.
(1) ÇÔ¼ö Æ÷ÀÎÅÍÀÇ ¼±¾ð
ÇÔ¼ö Æ÷ÀÎÅÍ ¼±¾ðÀº
¸®ÅÏÇüÅ (*ÇÔ¼öÆ÷ÀÎÅ͸í)([Àμö, Àμö, ...]);
ÀÌ·¸°Ô ÇÕ´Ï´Ù.
¿¹¸¦ µé¾î Á¤¼ö¸¦ ¸®ÅÏÇϰí Àμö´Â ¾ø´Â ÇÔ¼öÀÇ ÁÖ¼Ò¸¦ ³Ö´Â
FuncPointer¶ó´Â ÇÔ¼ö Æ÷ÀÎÅÍ´Â
int (*FuncPointer)();
ÀÌ·¸°Ô ¼±¾ðÇÕ´Ï´Ù. ÀÌ·¸°Ô ¼±¾ðÇÑ FuncPointer¶ó´Â ÇÔ¼ö Æ÷ÀÎÅÍ¿¡´Â
Á¤¼ö¸¦ ¸®ÅÏÇϰí Àμö°¡ ¾ø´Â ÇÔ¼öÀÇ ÁÖ¼Ò¸¸
³ÖÀ»¼ö ÀÖ°Ô µÇÁÒ.
(2) ÇÔ¼ö Æ÷ÀÎÅÍÀÇ »ç¿ë
ÇÔ¼ö Æ÷ÀÎÅÍ¿¡ ÇÔ¼öÀÇ ÁÖ¼Ò¸¦ ³Ö´Â ¹æ¹ýÀº
´ÙÀ½°ú °°½À´Ï´Ù.
ÇÔ¼öÆ÷ÀÎÅÍ = ÇÔ¼ö;
¿¹¸¦ µé¾î ¾Æ±î ³ª¿Ô´ø FuncPointer¶ó´Â ÇÔ¼ö
Æ÷ÀÎÅÍ¿¡
int Function()
{
.
.
.
}
À§¿Í °°Àº FunctionÀ̶ó´Â ÇÔ¼öÀÇ ÁÖ¼Ò¸¦
±â¾ï½ÃŰ·Á¸é
FuncPointer=Function;
ÀÌ·¸°Ô ÇÏ¸é µÊ´Ï´Ù.
±×·±µ¥ ¿©±â¼ FunctionÀÇ ÁÖ¼Ò¸¦ FuncPointer¿¡
³ÖÀ¸·Á°í Çϴµ¥ ¿Ö?
FuncPointer=&Function;
ÀÌ·¸°Ô ÁÖ¼Ò ¿¬»êÀÚ¸¦ »ç¿ëÇÏÁö ¾Ê¾ÒÀ»±î¿ä?
¾Æ±î ÇÔ¼ö¸íÀº »ó¼ö Æ÷ÀÎÅͶó°í ÇßÁÒ?
±×·¯¹Ç·Î FunctionÀº Æ÷ÀÎÅÍ À̱⠶§¹®¿¡ &¸¦ ºÙÀÌÁö ¾ÊÀº °Í ÀÔ´Ï´Ù.
Æ÷ÀÎÅÍ ¾È¿¡´Â ÁÖ¼Ò°¡ µé¾î ÀÖÀ¸´Ï±î¿ä.
ÇÔ¼ö Æ÷ÀÎÅÍ¿¡´Â ÇÔ¼öÀÇ ÁÖ¼Ò°¡ µé¾îÀִµ¥ ±× ÇÔ¼ö¸¦
È£ÃâÇÒ¶§´Â ¾î¶»°Ô ÇÒ±î¿ä?
¾Æ±î ÇÔ¼ö¸íÀº ÇÔ¼öÀÇ ½ÃÀÛ ÁÖ¼Ò°¡ µé¾îÀÖ´Â Æ÷ÀÎÅͶó°í Çß½À´Ï´Ù.
±×·±µ¥ ÇÔ¼ö Æ÷ÀÎÅÍ ¿ª½Ã ÇÔ¼öÀÇ ½ÃÀÛ ÁÖ¼Ò¸¦ ±â¾ï½Ã۰í ÀÖ´Â
Æ÷ÀÎÅÍ ÀÌÁÒ. ±×·¯¹Ç·Î ±×³É ÇÔ¼ö È£Ãâ ÇÏ´Â °Í°ú ¶È°°Àº ¹æ¹ýÀ¸·Î
È£ÃâÇÏ¸é µÊ´Ï´Ù. ¿¹¸¦ µé¾î À§¿¡ ³ª¿Ô´ø FuncPointer¶ó´Â ÇÔ¼ö Æ÷ÀÎÅÍÀÇ
ÇÔ¼ö¸¦ È£ÃâÇÏ·Á¸é
FuncPointer();
ÀÌ·¸°Ô ÇØ ÁÖ¸é µÇ´Â °ÍÀÌÁÒ.
À̰ÍÀ¸·Î ÇÔ¼ö Æ÷ÀÎÅÍ¿¡ ´ëÇÑ ³»¿ëÀº ¸¶Ä¡µµ·Ï ÇϰڽÀ´Ï´Ù.