Powered by AdLogger, Click Fraud Protection.
HOME | WIKI | JOINC RSS | °Ô½ÃÆÇ RSS    lynx ¿¡¼­µµ (±¤°í¸¸ »©°í)¹®Á¦¾øÀÌ º¸ÀÌ´Â »çÀÌÆ® JOINC
WIKI ÆäÀÌÁö
x man page
x ¹Ì´Ï»çÀÌÆ®
x Àüü±â»ç¸ñ·Ï
x ±â»çÁÖÁ¦º°
x Á¶°¢ÄÚµå
x ÆÁ¸ðÀ½
x ´ÚºÏ¿ø¹®µé
x ÄÄÇ»ÅÍ¿ë¾î»çÀü
x FAQ
x JCvs
x ¸µÅ©¸ðÀ½
x ÀÚ·á¹æ

·Î±×ÀÎ
¾ÆÀ̵ð

ÆÐ½º¿öµå

°¡ÀÔÇϱâ

°Ô½ÃÆÇ
x ¹¯°í´äÇϱâ
x ²ôÀûÀ̱â
x ÆÁ¸ðÀ½
x »õ¼Ò½Ä
x ±¤°í/È«º¸
x Á¦¾È¹× Àǰß

Åë°è
MRTG Æ®·¡ÇÈÁ¤º¸
À¥·Î±×ºÐ¼® º¸±â
Á¢±ÙÁ¤º¸ º¸±â
3,226 ÀÏ ¿î¿µÁß

´º½º±×·ì
han.comp.lang.c
han.comp.lang.c++

±âº»¹®¼­
o ÀÌ »çÀÌÆ®¿¡ ´ëÇØ¼­
o Âü¿©Çϱâ
o docbook »ç¿ëÇϱâ
o vim »ç¿ëÇϱâ
o C++ÇÁ·Î±×·¡¹Ö HOWTO
o CÇÁ·Î±×·¡¹Ö FAQ

   ÀλýÀº ´ÙÀ½ µÎ°¡Áö·Î ¼º¸³µÈ´Ù. ÇÏ°í ½ÍÁö¸¸ ÇÒ ¼ö ¾ø´Ù. ÇÒ ¼ö ÀÖÁö¸¸ ÇÏ°í ½ÍÁö ¾Ê´Ù. - ±«Å× -
µ¥ÀÌŸ¿Í Æ÷ÀÎÅÍ
Posted on 2002/9/23
Topic: ½Ã½ºÅÛ ÇÁ·Î±×·¥
¸¹Àº ÇÁ·Î±×·¡¸ÓµéÀÌ C ÀÇ Æ÷ÀÎÅÍ¿¡ ´ëÇØ¼­ (½ÉÁö¾î ²Ï ¿À·§µ¿¾È C ¾ð¾î¸¦ ´Ù·é ÇÁ·Î±×·¡¸ÓÁ¶Â÷µµ) Àϸ»ÀÇ °øÆ÷°¨À» °¡Áö°í ÀÖ´Ù. À̹ø ±â»ç¿¡¼­´Â ½ÇÁ¦·Î µ¥ÀÌŸ°¡ ¾î¶»°Ô ÀúÀåµÇ´ÂÁö¿¡ ´ëÇÑ ¿©·¯°¡Áö ¿¹Á¦¸¦ ÅëÇØ¼­ Æ÷ÀÎÅÍ¿¡ ´ëÇÑ ³»¿ëÀ» ¾Ë¾Æº¼ °ÍÀÌ´Ù. ´õºÒ¾î Çüº¯È¯, ¸Þ¸ð¸® Ä«ÇÇ µî¿¡ ´ëÇÑ ¸î°¡Áö Áö½Äµµ ¾òÀ»¼ö ÀÖÀ»°ÍÀÌ´Ù.

µ¥ÀÌŸ ¿Í Æ÷ÀÎÅÍ

1절. ¼Ò°³

C ¾ð¾î¸¦ °¡Àå óÀ½ Á¢Çϸ鼭 °Þ´Â ¾î·Á¿òÀº ¾ö°ÝÇÏ°Ô ±¸ºÐµÇ¾î ÀÖ´Â ÀÚ·áÇü°ú À̵é ÀÚ·áµéÀ» ´Ù·ç±â À§Çؼ­ »ç¿ëÇÏ´Â Æ÷ÀÎÅͶó´Â °³³ä ±×¸®°í ÀÌ¿Í ´õºÒ¾î¼­ »ç¿ëµÇ´Â Çüº¯È¯ ÀÌ´Ù.

ÀÌ´Â ÃÖ±ÙÀÇ ¿©·¯°¡Áö °í¼öÁØ ¾ð¾îµéÀÌ Æ÷ÀÎÅÍÀÇ »ç¿ëÀ» Áö¾çÇϰí, ÀÚ·áÇü¿¡ ±×¸® ¾ö°ÝÇÏÁö ¾Ê´Â°Í°ú ±¸ºÐµÈ´Ù. À̵éÀ» À¯Àú(ÇÁ·Î±×·¡¸Ó)°¡ Á÷Á¢ ´Ù·ç°Ô µÇ¸é ¾Æ¹«·¡µµ ÇÁ·Î±×·¥ ¿À·ù¸¦ À¯¹ß½Ãų °¡´É¼ºÀÌ ¸¹¾Æ ÁüÀ¸·Î ÄÄÆÄÀÏ·¯¿¡¼­ ÀÌ·¯ÇÑ °ÍµéÀ» ó¸®Çϵµ·Ï Çϰí ÀÖ´Ù.

C ¾ð¾î¿¡¼­ ÀÌ·¯ÇÑ °ÍµéÀÇ Ã³¸®´Â ÇÁ·Î±×·¡¸ÓÀÇ ¸òÀÌ´Ù. ±×·± ÀÌÀ¯·Î C ¾ð¾î¸¦ Áß±Þ¾ð¾î¶ó°í ÇÑ´Ù. ÇÁ·Î±×·¡¸Ó¿¡°Ô À§ÀÇ ¹®Á¦µéÀÇ ÇØ°áÀ» ¸Ã±èÀ¸·Î½á ºÐ¸í ÇÁ·Î±×·¡¸Ó¿¡°Ô ¸¹Àº ºÎ´ãÀÌ ÁÖ¾îÁö´Â °Ç »ç½ÇÀÌ´Ù. ±×·¯³ª ¶ÇÇÑ À̰͵éÀ» Á¦´ë·Î¸¸ »ç¿ëÇÒÁÙ ¾Ë°Ô µÈ´Ù¸é, ´Ù¸¥ ¾ð¾î¿¡¼­´Â °ï¶õÇÑ Àú¼öÁØ¿¡¼­ÀÇ ÇÁ·Î±×·¡¹ÖÀÌ °¡´ÉÇÏ°Ô µÈ´Ù. ÀÌ·± ÀÌÀ¯·Î C ¾ð¾î°¡ ½Ã½ºÅÛ/³×Æ®¿÷ ÇÁ·Î±×·¡¹Ö¿¡¼­ ´Ù¸¥ ¾ð¾îµé º¸´Ù ¿ìÀ§¿¡ ÀÖ°Ô µÇ´Â °ÍÀÌ´Ù.

ÀÌ ¹®¼­¿¡¼­´Â ÀÌ·¯ÇÑ ÀÚ·áµéÀÌ ¾î¶»°Ô ÀúÀåµÇ´ÂÁö, Çüº¯È¯ÀÌ ¾î¶»°Ô ÀϾ´ÂÁö ¶ÇÇÑ ÀÚ·á¿¡ Á¢±ÙÇϱâ À§Çؼ­ »ç¿ëµÇ´Â Æ÷ÀÎÅͶõ ¾î¶²°ÍÀÎÁö¿¡ ´ëÇØ¼­ ¾Ë¾Æº¸µµ·Ï ÇÒ°ÍÀÌ´Ù.

ÀÌ ¹®¼­´Â C ÀÔ¹®ÀÚ ¿¡°Ô Æ÷ÀÎÅÍ °³³äÀ» °¡¸£Å°±â À§ÇÑ ¸ñÀûÀ¸·Î ÀÛ¼ºµÈ ¹®¼­´Â ¾Æ´Ï´Ù. ¾î´ÀÁ¤µµ C¸¦ ¾Æ´Â »ç¿ëÀÚ¿¡ ÇÑÇØ¼­ ¿©ÀüÈ÷ Æ÷ÀÎÅÍ¿¡ ´ëÇØ¼­ Çò°¥¸®´Â C ¾ð¾î ÃÊ/Áß±Þ »ç¿ëÀÚ¸¦ À§ÇÑ ³»¿ëÀ» ´ã°í ÀÖ´Ù.


2절. µ¥ÀÌŸ¿Í Çü(Type)

°á±¹ ÇÁ·Î±×·¥ÀÌ ÇÏ´Â ÀÏÀº µ¥ÀÌŸ¸¦ ÀúÀåÇϰí, ÀоîµéÀ̰í ÀϾîµéÀÎ µ¥ÀÌŸ¸¦ ó¸®Çؼ­ °í°´ÀÌ ¿øÇÏ´Â Á¤º¸·Î º¯È¯Çؼ­ º¸¿©ÁÖ´Â °ÍÀÌ´Ù. ȤÀº ½Ã½ºÅÛ ÇÁ·Î±×·¥À̶ó¸é µ¥ÀÌŸ¸¦ ÀÌ¿ëÇØ¼­ ½Ã½ºÅÛÀ» Á¦¾îÇÏ´Â ÀÏÀ» ÇÒ°ÍÀÌ´Ù.

±×·¯¹Ç·Î µ¥ÀÌŸ°¡ ¾î¶² ¹æ½ÄÀ¸·Î ÀúÀåµÇ°í ÀоîµéÀϼö ÀÖ´ÂÁö ÀÌÇØÇÏ´Â °ÍÀº ´ë´ÜÈ÷ Áß¿äÇÑ ÀÏÀÌ´Ù.


2.1절. µ¥ÀÌŸ´Â bit ÀÇ ¿¬¼ÓµÈ ³ª¿­ÀÌ´Ù.

ÄÄÇ»ÅÍ ÀÔÀå¿¡¼­´Â ÇÁ·Î±×·¡¸Ó°¡ ÈçÈ÷ µ¥ÀÌŸÀÇ Çü ±¸ºÐÀ» À§Çؼ­ »ç¿ëÇÏ´Â int, char, long int ÀÌ·±°Í¿¡ ´ëÇØ¼­ ÀüÇô »ó°üÇÏÁö ¾Ê´Â´Ù. ÄÄÇ»ÅÍ ÀÔÀå¿¡¼­´Â µ¥ÀÌŸ´Â ´ÜÁö bit ÀÇ ³ª¿­ÀÏ »ÓÀÌ´Ù. ÄÄÇ»ÅÍ´Â ÀÌ bit ¸¦ 8bit(1byte) ´ÜÀ§·Î ÀúÀåÀ» ÇÏ°Ô µÈ´Ù.

ÇÁ·Î±×·¡¸Ó°¡ ÈçÈ÷ »ç¿ëÇÏ´Â µ¥ÀÌŸ ÇüÀ̶ó´Â °ÍÀº ÇÁ·Î±×·¡¸Ó°¡ µ¥ÀÌŸÀÇ Á¶ÀÛÀ» Æí¸®ÇϰԲû ¸¸µé¾î ³õÀº °Í¿¡ ºÒ°ú ÇÏ´Ù. Áï int ÇüÀ̶ó¸é ¿¬¼ÓµÈ 4 byte(32bit) Á¤º¸¸¦ memory ȤÀº µð½ºÅ©¿¡ ÀúÀåÇϰí, char ÇüÀ̶ó¸é 1 byte(8bit) ´ÜÀ§·Î Á¤º¸¸¦ ÀúÀåÇϰí/ÀоîµéÀϰÍÀ» ¾à¼ÓÇÑ °ÍÀÏ »ÓÀÌ´Ù. ±×·¯³ª ÄÄÇ»ÅÍÀÔÀå¿¡¼­´Â ±×³É byte ÀÇ ¿¬¼ÓµÈ Á¤º¸ÀÏ »ÓÀÌ´Ù.

´ÙÀ½ÀÇ ¿¹Á¦¸¦ ½ÇÇà½ÃÄÑ º¸ÀÚ

¿¹Á¦ : mem.c
#include <string.h>
#include <stdio.h>

int main()
{
    int  a[4];
    char c[6] = "6789";
    short int d[2];

    a[0] = 324;
    a[1] = 2000;
    a[2] = 3;
    a[3] = 4;

    printf("a : int, c : char, d : short int\n");

    printf("size int   %d\n", sizeof(int));
    printf("size char  %d\n", sizeof(char));
    printf("size short %d\n", sizeof(short));

    printf("a[0] : %x\n", &a[0]);
    printf("a[1] : %x\n", &a[1]);
    printf("a[2] : %x\n", &a[2]);
    printf("a[3] : %x\n", &a[3]);

    printf("c[0] : %x\n", &c[0]);
    printf("c[1] : %x\n", &c[1]);

    printf("d[0] : %x\n", &d[0]);
    printf("d[1] : %x\n", &d[1]);
}
			
´ÙÀ½Àº ÇÊÀÚÀÇ Linux ¹Ú½º(kernel 2.4.x) ¿¡¼­ÀÇ ½ÇÇà°á°ú ÀÌ´Ù. ½ÇÇà °ªÀº ´Ù¸¦¼ö ÀÖ´Ù. (¾Æ½Ã°ÚÁö¸¸ '&' ´Â ÁÖ¼Ò ¿¬»êÀÚÀÌ´Ù. ÁÖ¼Ò°ªÀ» µÇµ¹·ÁÁØ´Ù)
a : int, c : char, d : short int

size int   4
size char  1
size short 2

a[0] : bffff7b0
a[1] : bffff7b4
a[2] : bffff7b8
a[3] : bffff7bc

c[0] : bffff7a0
c[1] : bffff7a1

d[0] : bffff79c
d[1] : bffff79e
			
sizeof() ÇÔ¼ö´Â ÀÚ·áÇüÀÇ Å©±â¸¦ ¾Ë¾Æ³»±â À§Çؼ­ »ç¿ëÇÏ´Â ÇÔ¼öÀÌ´Ù. sizeof ¸¦ »ç¿ëÇÒ°æ¿ì ÇØ´ç ÀÚ·áÇüÀÇ Å©±â¸¦ byte ´ÜÀ§·Î µÇµ¹·ÁÁØ´Ù.

printf ¿¡¼­ Çü½ÄÈ­µÈ ÀÔÃâ·ÂÀ» À§ÇØ »ç¿ëµÈ %x ´Â 16 Áø¼ö ÇüÅ·Πº¸¿©ÁÖ±â À§ÇÑ ÀÎÀÚÀÌ´Ù. º¯¼ö a ´Â int ÇüÀ̸ç, int ÇüÀº ¾Æ½Ã´Ù½ÃÇÇ 32bit Å©±â¸¦ °¡Áø´Ù. À̰ÍÀ» sizeof ÇØº¸¸é 4(32/8) ¸¦ µÇµ¹·ÁÁÙ°ÍÀÌ´Ù. ÁÖ¼Ò °ªÀÇ Å©±â¸¦ º¸¶ó a[0] ¿¡¼­ ºÎÅÍ a[3] ±îÁö ÁÖ¼Ò°ªÀÌ 4 ¸¸Å­ Áõ°¡Çϰí ÀÖÀ½À» ¾Ë¼ö ÀÖ´Ù. ÀÌ ÁÖ¼Ò°ªÀº byte ´ÜÀ§·Î Áõ°¡¸¦ ÇÔÀ¸·Î a[0] ¿¡¼­ ºÎÅÍ a[3] ±îÁö ¸Þ¸ð¸® »ó¿¡ ¿¬¼ÓµÇ°Ô À§Ä¡Çϰí ÀÖÀ½À» ¾Ë¼ö ÀÖÀ»°ÍÀÌ´Ù.
 ´ÜÀ§ : byte 

      0 1 2 3 
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     | a[0]  | a[1]  | a[2]  | a[3]  |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
bffff7b0     7b4     7b8     7bc
       a[0] = 324 
       a[1] = 2000
       a[2] = 3
       a[3] = 4
			
º¯¼ö c ÀÇ °æ¿ì¿¡´Â char ÇüÀε¥, char ÇüÀº 1byte Å©±â¸¦ °¡Áø´Ù. ½ÇÁ¦ ÁÖ¼ÒÀÇ Áõ°¡ºÐÀ» ºÁµµ 1byte Å©±â ´ÜÀ§·Î Áõ°¡Çϰí ÀÖÀ½À» ¾Ë¼ö ÀÖ´Ù. 2 ¹ÙÀÌÆ® Å©±â¸¦ °¡Áö´Â short int µµ ¸¶Âù°¡Áö·Î 2byte Å©±â ´ÜÀ§·Î ÁÖ¼Ò °ªÀÌ Áõ°¡Çϰí ÀÖÀ½À» ¾Ë¼ö ÀÖ´Ù.


2.1.1절. ±¸Á¶Ã¼´Â ¾î¶»°Ô ÀúÀåµÇ´Â°¡ ?

À§ÀÇ char, int, short ¿Í °°Àº ÀÚ·áÇü¿Ü¿¡ struct ¿Í °°Àº ÇÁ·Î±×·¡¸Ó°¡ Á¤ÀÇÇØ¼­ »ç¿ëÇÏ´Â ÀÚ·áÇüµµ ÀÖ´Ù. ±¸Á¶Ã¼´Â ¿©·¯°³ÀÇ ÀÚ·áÇüÀ» ¹­¾î ³õÀº Çü½ÄÀ» ÃëÇϰí Àִµ¥, struct ÀÚ·áÇü ¿ª½Ã ÄÄÇ»ÅÍÀÇ ÀÔÀå¿¡¼­ ´Ü¼øÈ÷ ¿¬¼ÓµÈ byte ÀÇ ¸ðÀ½ÀÌ´Ù. ´ÙÀ½ ÇÁ·Î±×·¥À» ÄÄÆÄÀÏÈÄ ½ÇÇà½ÃÄÑ º¸ÀÚ.
#include <stdio.h>

struct mydata
{
    int age;
    int weight;

    char name[16];
    char juso[80];
};

int main()
{
    struct mydata data;

    printf("%d\n", sizeof(data));

    printf("mydata.age    : %x\n", &data.age);
    printf("mydata.weight : %x\n", &data.weight);
    printf("mydata.name   : %x\n", &data.name);
    printf("mydata.juso   : %x\n", &data.juso);
}
				
½ÇÇàÇÏ¸é ´ÙÀ½°ú °°Àº °á°ú¸¦ º¸¿©ÁÙ °ÍÀÌ´Ù.
104
mydata.age    : bffff740
mydata.weight : bffff744
mydata.name   : bffff748
mydata.juso   : bffff758
				
mydata ±¸Á¶Ã¼ÀÇ sizof °ªÀº 104 °¡ ³ª¿Ô´Ù. °è»êÀ» ÇØº¸¸é 4+4+16+80 = 104 ·Î Á¤È®ÇÏ°Ô Å©±â°¡ °è»êµÇ¾úÀ½À» ¾Ë¼ö ÀÖ´Ù. ±×¸®°í printf ÀÇ ÁÖ¼Ò°ªÀ» º¸¸é °¢°¢ÀÇ ÀÚ·áÇü¿¡ ¾Ë¸Âµµ·Ï ¸Þ¸ð¸® Å©±â°¡ ÇÒ´çµÇ¾î ÀÖÀ¸¸ç, ¸Þ¸ð¸® »ó¿¡¼­ ¿¬¼ÓµÇ°Ô ÇÒ´çµÇ¾î ÀÖÀ½À» ¾Ë¼ö ÀÖÀ» °ÍÀÌ´Ù. age, weight ´Â 4byte ¾¿, name 16 byte, juso ´Â 80byte °¡ ÇÒ´çµÇ¾î ÀÖÀ½À» ¾Ë¼ö ÀÖÀ» °ÍÀÌ´Ù.


2.1.2절. void Çü¿¡ ´ëÇØ¼­

¿©·¯ºÐÀº void ŸÀÔ¿¡ ´ëÇØ¼­ µé¾îº»ÀûÀÌ ÀÖÀ»°ÍÀÌ´Ù. À̰Š»ó´çÈ÷ È¥µ¿µÉ¼ö Àִµ¥, void ŸÀÔÀ̶õ À̸¦Å×¸é µ¥ÀÌŸÇü À» ÄÄÇ»ÅÍ ÀÔÀå¿¡¼­ ÇØ¼®ÇÏ´Â °ÍÀÌ´Ù. ÇÁ·Î±×·¡¸ÓÀÇ °æ¿ì ÇÁ·Î±×·¡¹Ö ÀÛ¾÷À» ¼ö¿ùÇÏ°Ô Çϱâ À§Çؼ­ ´Ù¾çÇÑ µ¥ÀÌŸ ŸÀÔÀ» ÀÌ¿ëÇÏÁö¸¸ ¸»ÇßµíÀÌ ÄÄÇ»ÅÍ¿¡°Ô À־ µ¥ÀÌŸ ŸÀÔÀº »ç½Ç Çʿ䰡 ¾ø´Ù. ÄÄÇ»ÅÍ ÀÔÀå¿¡¼­´Â ´ÜÁö ¿¬¼ÓµÈ 8bit(byte) µ¥ÀÌŸÀÇ ³ª¿­ÀÏ »ÓÀÌ´Ù. ´Þ¸® ¸»ÇÏÀÚ¸é ÄÄÇ»ÅÍ ÀÔÀå¿¡¼­´Â ¸ðµç µ¥ÀÌŸ´Â void ÇüÀÌ´Ù. ±×·¯¹Ç·Î void ŸÀÔÀÇ °æ¿ì ¸ðµç µ¥ÀÌŸÇüÀ» ÀúÀåÇÒ¼ö ÀÖ°Ô µÈ´Ù.

º¸ÅëÀÇ °æ¿ì int, char ȤÀº struct ¿Í °°Àº µ¥ÀÌŸ ŸÀÔÀ» ÀÌ¿ëÇØ¼­ ÀÛ¾÷ÇÏ´Â °ÍÀº ¸Å¿ì Æí¸®Çϱä ÇÏÁö¸¸, ¶§¶§·Î µ¥ÀÌŸ ŸÀÔÀ» ºÐ¸®Çؼ­ ÀÛ¾÷ÇÏ¸é ¿ÀÈ÷·Á ºÒÆíÇÑ °æ¿ì°¡ »ý±æ¼ö°¡ ÀÖ´Ù. ´ëÇ¥ÀûÀÎ ¿¹·Î memcpy ¸¦ ¿¹·Î µé¾îº¸ÀÚ. memcpy ´Â ´ÙÀ½°ú °°ÀÌ ¼±¾ðµÇ¾î Àִµ¥,
void *memcpy(void *dest, const void *src, size_t n);
				
¸¸¾à ÁÖ¾îÁö´Â ÀÎÀÚ°¡ void ÇüÀÌ ¾Æ´Ï¶ó°í °¡Á¤ÇØ º¸ÀÚ. ±×·¸´Ù¸é int Çü º¹»ç, char Çüº¹»ç, struct Çü º¹»ç¸¦ Çϱâ À§ÇÑ º°µµÀÇ memcpy ÇÔ¼ö¸¦ ¸¸µé¾î¾ß¸¸ ÇÒ°ÍÀÌ´Ù.(À̸¦Å׸é imemcpy, cmemcpy µî) À̰Š´ë´ÜÈ÷ ±ÍÂúÀº ÀÛ¾÷ÀÌ´Ù. ±×³ª¸¶ ¿ì¸®°¡ Å©±â¸¦ ¾Ë°í ÀÖ´Â int, char °°Àº °æ¿ì¶ó¸é ±¦Âú°ÚÁö¸¸, »ç¿ëÀÚ Á¤ÀÇÇü µ¥ÀÌŸŸÀÔÀ» À§ÇÑ memcpy ÇÔ¼ö¸¦ ¸¸µå´Â°Ç »ó´çÈ÷ ±î´Ù·Î¿î ÀÛ¾÷ÀÌ µÉ°ÍÀÌ´Ù.

±×·¸´Ù¸é °¡Àå °£´ÜÇÑ ¹æ¹ýÀº µ¥ÀÌŸ ŸÀÔ¿¡ »ó°üÇÏÁö ¾Ê°í ÄÄÇ»ÅÍ ÀÔÀå¿¡¼­ µ¥ÀÌŸ¸¦ ¹Ù¶ó º¸´Â °ÍÀÌ´Ù. ¹Ù·Î ÄÄÇ»ÅÍ ÀÔÀå¿¡¼­ÀÇ µ¥ÀÌŸ ŸÀÔÀÌ void ÇüÀÌ´Ù. ÄÄÇ»ÅÍÀÔÀå¿¡¼­´Â µ¥ÀÌŸ ŸÀÔÀº void Çü ¿ÀÁ÷ ÇϳªÀ̹ǷÎ, ÇÁ·Î±×·¡¸Ó°¡ Á¤ÀÇÇÑ µ¥ÀÌŸ ŸÀÔÀ» °øÅë µ¥ÀÌŸ ŸÀÔÀÎ void ÇüÀ¸·Î Çüº¯È¯(cast) ½ÃÄÑÁشٸé, ŸÀÔ¿¡ °ü°è¾øÀÌ ÀÛ¾÷ÇÒ¼ö ÀÖ°Ô µÉ°ÍÀÌ´Ù.

´ÙÀ½Àº void ÇüÀÇ ÀÌÇØ¸¦ µ½±â À§ÇÑ °£´ÜÇÑ ¿¹Á¦ÀÌ´Ù.

¿¹Á¦ memcpy2.c
#include <unistd.h>

struct mydata
{
    int age;
    int weight;

    char name[16];
    char juso[80];
};

int main()
{
    struct mydata data;
    char f_data[120];
    int my_weight;

    data.age    = 29;
    data.weight = 64;

    strcpy(data.name, "yundream");
    strcpy(data.juso, "seoul korea");

    memset(f_data, 0x00, 120);
    memcpy(f_data, (void *)&data, sizeof(struct mydata));
    memcpy((void *)&my_weight, f_data+4, sizeof(int));

    printf("%d\n", my_weight);
}
				
memcpy ÇÑÈÄ f_data ÀÇ ¸Þ¸ð¸® ±¸¼ºÀ» º¸¸é ¾Æ·¡¿Í °°À» °ÍÀÌ´Ù.
 
 we = weight
 ´ÜÀ§ : byte

  4    4    16            80                     16        
 +----+----+-------------+----------------------+-----------+
 |age |we  |name         | juso                 | NULL      |
 +----+----+-------------+----------------------+-----------+

 |                                                          | 
 +--------                 120 byte                  -------+
				
Âü°í·Î char ÇüÀÏ °æ¿ì void ÇüÀ¸·Î Çüº¯È¯(cast) ÇÒ Çʿ䰡 ¾ø´Ù. ¿Ö³ÄÇϸé char ´Â 1byte ´ÜÀ§·Î ÄÄÇ»ÅÍÀÇ µ¥ÀÌŸ ÀúÀå´ÜÀ§ 1byte ¿Í µ¿ÀÏÇϱ⠶§¹®ÀÌ´Ù.

¾î¶µç void ŸÀÔÀ» ÀÌ¿ëÇØ¼­ ÀüÇô ´Ù¸¥ µ¥ÀÌŸ ÇüÀ¸·Î µ¥ÀÌŸ º¹»ç¸¦ Çϱä Çߴµ¥, ±×·¸´Ù¸é f_data ¿¡¼­ µ¥ÀÌŸ¸¦ °¡Á®¿À´Â°Ç ¾î¶»°Ô ÇØ¾ß ÇÒ±î. °¡Àå °£´ÜÇÑ ¹æ¹ýÀº mydata ÇüÀÇ º¯¼ö¸¦ Çϳª´õ ¸¸µç´ÙÀ½¿¡ ¿©±â¿¡ memcpy ½ÃŰ´Â ¹æ¹ýÀÌ ÀÖÀ»¼ö ÀÖÀ»°ÍÀÌ´Ù.
mydata data2;
...

memcpy((void *)&data2, f_data, sizeof(mydata));
				
ÀÌ·¸°Ô Çϸé f_data ¿¡¼­ sizeof(mydata) Å©±âÀÎ 104 ¸¸Å­ÀÌ data2 ·Î º¹»çµÉ °ÍÀÌ´Ù.

¸¸¾à weight ÀÇ Á¤º¸¸¸À» °¡Á®¿À°í ½Í´Ù¸é, ±»ÀÌ struct Àüü¸¦ º¹»çÇÒ ÇÊ¿ä ¾øÀÌ ´ÙÀ½°ú °°Àº ¹æ¹ýÀ¸·Î weight Á¤º¸¸¦ °¡Á®¿Ã¼ö ÀÖÀ»°ÍÀÌ´Ù.
int my_weight;
...

memcpy((void *)&my_weight, f_data+4, sizeof(int));
				
¿ì¸®°¡ °¡Á®¿À°íÀÚ ÇÏ´Â °ªÀº f_data ¿¡¼­ 4 ¹ÙÀÌÆ®¸¸Å­ µÚ·Î À̵¿ÇÑ µ¥ÀÌŸ ÀÌ´Ù. (age °¡ int ÇüÀ¸·Î 4byte ÀÇ Å©±â¸¦ °¡ÁüÀ¸·Î) ±×·³À¸·Î f_data ¿¡ +4 ¸¸Å­ ÇØÁÖ¸é weight °¡ ÀúÀåµÈ °÷ÀÇ ÁÖ¼Ò¸¦ °¡¸£Å°°Ô µÉ°ÍÀÌ´Ù. ¿ì¸®°¡ °¡Á®¿À°í ½Í¾îÇÏ´Â weight µ¥ÀÌŸ´Â 4 ¹ÙÀÌÆ® Å©±âÀÇ int Çü µ¥ÀÌŸ ÀÓÀ¸·Î sizeof(int) ÀÇ Å©±â¸¸Å­À» my_weight °¡ °¡¸£Å°´Â ÁÖ¼Ò·Î º¹»çÇÏ¸é µÉ°ÍÀÌ´Ù.

name, juso °ª ¿ª½Ã À§¿Í °°Àº ¹æ¹ýÀ¸·Î °¡Á®¿Ã¼ö ÀÖ´Ù.

±×¸®°í ¸Þ¸ð¸®´Â ¿¬¼ÓµÇ°Ô ÇÒ´çµÈ´Ù´Â Á¡¿¡ Âø¾ÈÇÑ´Ù¸é ´ÙÀ½°ú °°Àº ÄÚµùµµ °¡´ÉÇÒ°ÍÀÌ´Ù.
#include <unistd.h>

struct mydata
{
    int a;
    int b;
};
int main()
{
    int c[2];

    struct mydata data;

    data.a = 1;
    data.b = 2;

    memcpy((void *)&c, (void *)&data, sizeof(struct mydata));

    printf("%d\n", c[0]);
    printf("%d\n", c[1]);

}
				
Ãâ·ÂÀ» ÇØº¸¸é ¾Ë°ÚÁö¸¸ ±¸Á¶Ã¼°¡ ±×´ë·Î c[2] ¹è¿­ º¯¼ö¿¡ º¹»çµÇ¾úÀ½À» ¾Ë¼ö ÀÖ´Ù. ¾îÂ÷ÇÇ c[2] µµ 8byte ÀÇ Å©±â¸¦ °¡Áö°í, mydata µµ 8byte ¸¦ °¡Áö°í ÀÖÀ½À¸·Î void ÇüÀ¸·Î Çüº¯È¯½ÃÄÑÁÖ°í º¹»çÇÑ´Ù¸é, µ¿ÀÏÇÑ ¸Þ¸ð¸®ºí·° ±¸Á¶¸¦ °¡Áú¼ö Àֱ⠶§¹®ÀÌ´Ù.


3절. Æ÷ÀÎÅÍ(Pointer)

"Æ÷ÀÎÅͶõ µ¥ÀÌŸ°¡ ÀúÀåµÈ ÁÖ¼Ò¸¦ °¡¸£Å²´Ù." ´ëºÎºÐÀÇ C ¾ð¾î ÀÔ¹®¼­¿¡ º¸¸é º¸Åë ÀÌ·¸°Ô Æ÷ÀÎÅÍ¿¡ ´ëÇÑ ¼³¸íÀ» ½ÃÀÛÇÑ´Ù. ºÐ¸í Ʋ¸°¸»Àº ¾Æ´Ï¸ç, À§ÀÇ ¸íÁ¦´ë·Î Æ÷ÀÎÅÍÀÇ °³³äÀº ¸Å¿ì °£´ÜÇÏ´Ù°í ÇÒ¼ö ÀÖ´Ù. ±×·¸Áö¸¸ C ¾ð¾î Ãʺ¸ÀÚÀÌ°Ç Áß±Þ»ç¿ëÀÚÀÌ°Ç °£¿¡ Æ÷ÀÎÅͶó´Â °ÍÀÌ °³³ä¸¸Å­ ¸¸¸¸Ä¡ ¾Ê´Ù¶ó´Âµ¥ °ø°¨ÇÒ°ÍÀÌ´Ù.

½ÉÁö¾î C ¾ð¾îÀÇ È°¿ëÀ» °¡·Î¸·´Â °¡Àå Å« Àû Çϸé ÀϼøÀ§·Î ²Å´Â°Ô "Æ÷ÀÎÅÍ" ÀÏ Á¤µµÀÌ´Ù.

À̹øÀå¿¡ ´ëÇØ¼­´Â Pointer ¿¡ ´ëÇÑ ±âº»ÀûÀÎ °³³ä¿¡ ´ëÇØ¼­ ¾Ë¾Æº¸µµ·Ï ÇϰڴÙ.


3.1절. Æ÷ÀÎÅÍ´Â ÁÖ¼Ò¸¦ °¡¸£Å²´Ù

Æ÷ÀÎÅÍ´Â ±× µ¥ÀÌŸ°¡ ÀúÀåµÈ ÁÖ¼Ò¸¦ °¡¸£Å²´Ù. ´Ù½Ã mem.c ÀÇ °á°ú¸¦ º¸µµ·Ï ÇÏÀÚ.
 ´ÜÀ§ : byte 

      0 1 2 3 
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     | a[0]  | a[1]  | a[2]  | a[3]  |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
bffff7b0     7b4     7b8     7bc

       a[0] = 324
       a[1] = 2000
       a[2] = 3
       a[3] = 4
			
C ¿¡¼­´Â Æ÷ÀÎÅÍ ¿¬»êÀ» À§ÇÑ ¿¬»êÀÚ¸¦ º°µµ·Î Á¦°øÇϴµ¥ '*' ÀÌ´Ù. À̰ÍÀ» ÅëÇØ¼­ µ¥ÀÌŸ¸¦ Æ÷ÀÎÅ͸¦ »ç¿ëÇØ¼­ Á¢±ÙÇÒ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î *a ¸¦ »ç¿ëÇÑ´Ù¸é À̰ÍÀÇ ¶æÀº "º¯¼ö a ¸¦ À§ÇØ ÇÒ´çµÈ ¸Þ¸ð¸®ÀÇ ÁÖ¼Ò¸¦ °¡¸£Å°´Â" ÀÇ ¶æÀÌ µÈ´Ù. mem.c ¿¡ ´ÙÀ½ÀÇ Äڵ带 Ãß°¡ ½ÃÄÑ º¸ÀÚ
printf("%d
", *a);			
			
a °¡ ÀúÀåµÈ ÁÖ¼ÒÀÇ °ªÀº bffff7b0 ÀÌ´Ù(*a °¡ °¡¸£Å°´Â ÁÖ¼ÒÀÇ °ª). %d ¸¦ »ç¿ëÇÏ¿©¼­ Ãâ·ÂÀ» Ç϶ó°í ÇßÀ½À¸·Î bffff7b0 ¿¡¼­ ºÎÅÍ bffff7b3 ±îÁöÀÇ °ªÀ» int ÇüÀ¸·Î º¯È¯ÇÏ¿© Ãâ·ÂÀ» ÇÏ°Ô µÉ°ÍÀÌ´Ù. ±×·¯¹Ç·Î À§ÀÇ ÄÚµå´Â "324" À» Ãâ·Â ½ÃŲ´Ù.

±×·¸´Ù¸é ÇѰ¡Áö ±Ã±ÝÇÑ°Ô ÀÖ´Ù. ¸¸¾à printf("%c ", *a) ·Î Ãâ·ÂÇ϶ó°í ÇÏ¸é ¾î¶»°Ô µÉ±î? ¿¡·¯°¡ ¹ß»ýÇÏ°Ô µÉ±î ? ´«Ä¡ ë°ÚÁö¸¸ ÄÄÆÄÀÏ¿¡·¯µµ ¹ß»ýÇÏÁö ¾Ê°í, ¿ö´×µµ ¹ß»ýÇÏÁö ¾ÊÀ» »Ó´õ·¯, ½ÇÇà½Ã ¿¡µµ ¿¡·¯°¡ ¹ß»ýÇÏÁö ¾Ê´Â´Ù. À§ÀÇ °æ¿ì¸¦ ÇØ¼®ÇØ º¸ÀÚ¸é, a °¡ ÀúÀåµÈ ÁÖ¼Ò·Î ºÎÅÍ 1byte ¸¸Å­ (%c ´Â 1byte ij¸¯Å͸¦ Ãâ·ÂÇϱâ À§Çؼ­ »ç¿ëÇÔÀ¸·Î) µ¥ÀÌŸ¸¦ Àоîµé¿©¼­ È­¸é¿¡ Ãâ·ÂÇÏ°Ô µÈ´Ù. *a °¡ ÀúÀåµÈ ¸Þ¸ð¸®ÀÇ ÁÖ¼Ò¿¡ ÀúÀåµÈ µ¥ÀÌŸ¸¦ ÀÚ¼¼È÷ »ìÆìº¸¸é
bffff7b0          b1         b2         b3
       01000100   00000001   00000000   00000000
			
ÀÌ µÉ°ÍÀÌ´Ù. (°è»ê±â·Î °è»êÇØ º¸¸é 324 ´Â 101000100 ÀÌ´Ù. ±×·±µ¥, Linux ´Â ¸®Æ²¿£µð¾È ÀúÀ广½Ä À» µû¸§À¸·Î ³·ÀºÁÖ¼ÒÀÇ µ¥ÀÌŸ°¡ °¡Àå ¸ÕÀú ÀúÀå¹Ç·Î À§¿Í °°Àº ¹æ½ÄÀ¸·Î ¸Þ¸ð¸®¿¡ ÀúÀåµÈ´Ù. ¿£µð¾È¿¡ ´ëÇÑ ³»¿ëÀº Endian¿¡ ´ëÇØ¼­¸¦ ÂüÁ¶Çϱ⠹ٶõ´Ù) ±×·¯¹Ç·Î printf("%c ", *a) °¡ Ãâ·ÂÇÏ°Ô µÇ´Â °ªÀº bffff7b0 ¿¡¼­ ºÎÅÍ 1byte ¸¸Å­ ÀúÀåµÇ¾î ÀÖ´Â °ªÀÎ 01000100 ÀÌ´Ù. À̰ÍÀ» 10 Áø¼ö·Î º¯È¯ ½ÃÄѺ¸¸é 68 À̰í 68 Àº ASCII ÄÚµåÇ¥¿¡¼­ D ¸¦ °¡¸£Å°¹Ç·Î °á±¹ 'D' ¸¦ Ãâ·ÂÇÏ°Ô µÈ´Ù.

¾Æ¸¶ Æ÷ÀÎÅÍ¿¡ ´ëÇÑ ´ë·«ÀûÀÎ ÀÌÇØ¸¦ ÇßÀ»°ÍÀÌ´Ù. ±×·¸´Ù¸é a[0] À» °¡Á® ¿À´Â°Ç ¾Ë°Ú´Âµ¥ a[1] ÀÇ °ªÀº ¾î¶»°Ô ÇÏ¸é °¡Á®¿Ã¼ö ÀÖÀ»Áö ¾Ë¾Æº¸ÀÚ. °£´ÜÈ÷ »ý°¢Çؼ­ ÃÖÃÊ *a ¿¡¼­ 4 ¸¸Å­ Æ÷ÀÎÅÍÀÇ À§Ä¡¸¦ À̵¿½ÃŰ¸é µÉ°ÍÀÌ´Ù. ½ÇÁ¦·Î ÀÌ·¯ÇÑ ¹æ½ÄÀ¸·Î Æ÷ÀÎÅÍ ¿¬»êÀ» ÇÏ°Ô µÈ´Ù.

±×³É *(a+1) ÇØÁÖ¸é µÈ´Ù. +1 À̸é Ȥ½Ã 1byte ¸¸Å­¸¸ Áõ°¡ÇÏÁö ¾ÊÀ»Áö.. °ÆÁ¤ÀÌ µÉ¼öµµ ÀÖ°ÚÁö¸¸ ÀÌ·²°æ¿ì ÄÄÆÄÀÏ·¯°¡ º¯¼ö 'a' ÀÇ sizeof ¸¦ °è»êÇØ¼­ ¾Ë¾Æ¼­ Áõ°¡ ½ÃÄÑÁØ´Ù. Áï sizeof(a) ´Â 4 ÀÓÀ¸·Î *(a+1) Àº bffff7b0 + 4 ÀÇ ÁÖ¼Ò¸¦ °¡¸£Å°°Ô µÈ´Ù. a[1] ÀÇ °ªÀ» °¡Á®¿À±æ ¿øÇÑ´Ù¸é ¾Æ·¡¿Í °°ÀÌ ÄÚµùÇÏ¸é µÈ´Ù.
printf("%d
", *(a+1));
			
±×·¯¸é bffff7b4 ¿¡¼­ bffff7b7 ±îÁöÀÇ °ªÀ» Àоîµé¿©¼­ int ÇüÀ¸·Î º¯È¯½ÃÄѼ­ Ãâ·Â ½ÃÄÑÁÖ°Ô µÈ´Ù. ¸¶Âù°¡Áö·Î *c+1 À» ÇÏ°Ô µÇ¸é 1byte ¸¸Å­ Áõ°¡ ½ÃÄѼ­ ÇØ´ç ÁÖ¼Ò°¡ °¡¸£Å°´Â °ªÀ» È­¸é¿¡ Ãâ·Â ½ÃÄÑÁÙ°ÍÀÌ´Ù.

±×¸®°í È¥µ¿ÇÒ¼ö Àִµ¥, *a+1 °ú *(a+1)Àº ±× °á°ú °ªÀÌ ¾ö¿¬È÷ ´Ù¸£´Ù. *a+1 Àº *a ÀÇ °ª¿¡ +1 À» ÇØÁÖ´Â °ÍÀ̰í (Áï 325), *(a+1), aÀÇ ÁÖ¼Ò¿¡ sizeof(a)*1 ¸¸Å­ À̵¿ÇÑ ÁÖ¼Ò°ªÀ» °¡¸£Å°´Â °ÍÀÌ´Ù. ÀüÀÚ´Â ±×³É µ¡¼À ¿¬»êÀ̰í, ÈÄÀÚ°¡ Æ÷ÀÎÅÍ ¿¬»êÀÌ´Ù. °¡²û È¥µ¿µÉ¼ö ÀÖÀ¸´Ï ÁÖÀÇÇØ¾ß ÇÑ´Ù.

ÀÚ ±×·¯¸é ¿¹Á¦ memcpy2.c ¸¦ pointer ¹öÁ¯À¸·Î ¹Ù²Ù¾î º¸ÀÚ. memcpy2.c ´Â void ÇüÀ» ¼³¸íÇϱâ À§ÇÑ ¿¹Á¦·Î´Â ¾µ¸¸ÇÏÁö¸¸ µ¥ÀÌŸÀÇ ÀÌ¿ëÀ» À§Çؼ­ ºñ¿ëÀÌ Å« ¸Þ¸ð¸® º¹»ç¸¦ »ç¿ëÇÑ´Ù¶ó´Â ´ÜÁ¡À» °¡Áö°í ÀÖ´Ù. À̰ÍÀ» ¾Æ·¡¿Í °°ÀÌ Æ÷ÀÎÅÍ ¹öÁ¯À¸·Î ¹Ù²Ù¸é °ÅÀÇ ºñ¿ëÀÌ µéÁö ¾Ê´Â È¿À²ÀûÀÎ Äڵ带 ¸¸µé¼ö ÀÖ´Ù.

¿¹Á¦ : memcpy3.c
#include <unistd.h>

struct mydata
{
    int age;
    int weight;

    char name[16];
    char juso[80];
};

int main()
{
    struct mydata data, *data2;
    char *f_data;
    int my_weight;
	int *test;

    data.age    = 29;
    data.weight = 64;

    strcpy(data.name, "yundream");
    strcpy(data.juso, "seoul korea");

    printf("point size %d\n", sizeof(f_data));
    printf("point size %d\n", sizeof(test));

    // ÂüÁ¶ 1
    printf("data    : %x\n", &data);
    printf("f_data  : %x\n", &f_data);
    printf("data2   : %x\n", &data2);


    // ÂüÁ¶ 2 
    f_data = (void *)&data;

	// ÂüÁ¶ 3 
    data2 = (void *)f_data;

    printf("data2 %d\n", data2->age);
    printf("data2 %d\n", data2->weight);
}
			
À§ÀÇ ÄÚµå´Â µ¥ÀÌŸÀÇ º¹»ç°¡ ÀϾÁö ¾Ê´Â´Ù. ÂüÁ¶ 2À» º¸¸é f_data °¡ data ÀÇ ÁÖ¼ÒÀ§Ä¡¸¦ °¡¸£Å°´Â(Æ÷ÀÎÅÍ) Çϵµ·Ï Çß´Ù. ±×¸®°í ÂüÁ¶ 3¿¡¼­´Â data2 °¡ ´Ù½Ã f_data ÀÇ ÁÖ¼Ò À§Ä¡¸¦ °¡¸£Å°µµ·Ï Çß´Ù. ÂüÁ¶ 2¿¡¼­ ÁÖ¼Ò ¿¬»êÀÚ '&' °¡ »ç¿ëµÈ ÀÌÀ¯´Â data ´Â Æ÷ÀÎÅͰ¡ ¾Æ´ÔÀ¸·Î Æ÷ÀÎÅÍÀÎ f_data ¿¡ ´ëÀÔ½Ãų¼ö°¡ ¾ø±â ¶§¹®ÀÌ´Ù. ´ëÀÔ¿¬»êÀÚ´Â °°Àº ŸÀÔÀÏ °æ¿ì¿¡¸¸ °¡´ÉÇÏ´Ù. ±×·¯¹Ç·Î ÁÖ¼Ò¿¬»êÀÚ '&' ¸¦ ÀÌ¿ëÇØ¼­ data ÀÇ ÁÖ¼Ò¸¦ f_data ¿¡ ´ëÀÔ °¡´ÉÇϵµ·Ï ¸¸µç°ÍÀÌ´Ù. ÂüÁ¶ 3 ¿¡¼­ f_data ´Â ±× ÀÚü°¡ Æ÷ÀÎÅÍ ÀÓÀ¸·Î Æ÷ÀÎÅÍÀÎ data2 ¿¡ ´ëÀÔÇØµµ ÀüÇô ¹®Á¦°¡ ¾ø´Ù.

À§ÀÇ °á°ú¸¦ Ãâ·ÂÇØ º¸¸é ¾Æ·¡¿Í ºñ½ÁÇÏ°Ô ³ª¿Ã°ÍÀÌ´Ù. ½ÇÇà½Ã ¸Þ¸ð¸® »óŵ µû¶ó¼­ °ªÀÌ ´Ù¸£°Ô ³ª¿Ã¼ö ÀÖ´Ù.
point size 4
point size 4
data    : bffff700
f_data  : bffff6f8
data2   : bffff6fc

data2.age    29
data2.weight 64
			
±×·±µ¥ Á» ÀÌ»óÇÑ°Ô ÀÖ´Ù char *, int * ÀÇ Å©±â°¡ ¸ðµÎ 4 ·Î ³ª¿Í ÀÖ´Ù. ±× ÀÌÀ¯´Â Æ÷ÀÎÅÍ ÀÚü°¡ ÇϳªÀÇ ÀÚ·áÇüÀ¸·Î Ãë±ÞµÇ±â ¶§¹®ÀÌ´Ù. Æ÷ÀÎÅ͸¦ À§ÇÑ Å©±â´Â ¿î¿µÃ¼Á¦¿¡ µû¶ó ´Ù¸£Áö¸¸ º¸Åë 4¹ÙÀÌÆ®ÀÎ °æ¿ì°¡ ¸¹´Ù. À̰æ¿ì °¡¸£Å³¼ö ÀÖ´Â ¸Þ¸ð¸®ÀÇ ÃÖ´ë Å©±â´Â 2^32 ÀÌ µÉ°ÍÀÌ´Ù. ¸®´ª½º´Â 4byte ÀÇ Å©±â¸¦ °¡ÁüÀ¸·Î ´ë·«ÀûÀ¸·Î ¸®´ª½º ¿î¿µÃ¼Á¦°¡ °ü¸®ÇÒ¼ö ÀÖ´Â ¸Þ¸ð¸®ÀÇ ÃÖ´ëÅ©±â´Â 4G ¹ÙÀÌÆ® ÂëÀÌ µÉ°ÍÀ̸ç, ½ÇÁ¦·Î Ä¿³Î¿¡ Ưº°ÇÑ ÆÐÄ¡¸¦ °¡ÇÏÁö ¾Ê´ÂÇÑ ÀÌÁ¤µµÀÇ ÇѰ踦 °¡Áø´Ù.

°¢ Æ÷ÀÎÅÍ´Â ÀÚ½ÅÀÌ °¡¸®ÄѾßÇÒ µ¥ÀÌŸ°¡ ÀÖ´Â ÁÖ¼ÒÀÇ À§Ä¡ Á¤º¸¸¦ °¡Áö°í ÀÖ´Ù. À§ÀÇ °¢ Æ÷ÀÎÅͰ¡ °¡¸£Å°´Â Á¤º¸¸¦ ±×¸²À¸·Î ³ªÅ¸³½´Ù¸é ¾Æ·¡¿Í °°À» °ÍÀÌ´Ù.
 ´ÜÀ§ : byte
                0 1 2 3       0 1 2 3 4 ......           103
 +-+-+-+-+     +-+-+-+-+     +-+-+-+-+-+----------------+-+
 |f_data |     | data2 |     | data                       |
 +-+-+-+-+     +-+-+-+-+     +-+-+-+-+-+----------------+-+
  bffff6f8      bffff6fc      bffff700
 ||             |             |
 |+-----<-------+             |
 +------------->--------------+
			
data2 ¿¡¼­ age °ªÀ» °¡Á®¿À±â À§Çؼ­ ÁÖ¼Ò ¿¬»êÀÚ "->"¸¦ »ç¿ëÇϰí Àִµ¥, À§ÀÇ ±×¸²À» º¸¸é ÀÌÇØ°¡ °¡´ÉÇÒ°ÍÀÌ´Ù. age ¶ó´Â ¸â¹öº¯¼öÀÇ °ªÀº data2 ÀÇ ¸â¹ö º¯¼ö°¡ ¾Æ´Ñ data2 °¡ °¡¸£Å°°í(Æ÷ÀÎÅÍ Çϰí) ÀÖ´Â dataÀÇ ¸â¹öº¯¼öÀÌ´Ù. ±×·¯¹Ç·Î ¹Ýµå½Ã Æ÷ÀÎÅÍ ¿¬»êÀÚ¸¦ ½á¼­, ÂüÁ¶ÇÒ µ¥ÀÌŸ°¡ ÀÖ´Â ÁÖ¼Ò°ªÀ» ¿¬»êÇØ ÁÖ¾î¾ß ÇÑ´Ù. ¸¸¾à data2.age ·Î °ªÀ» °¡Á®¿À·Á°í ÇÑ´Ù¸é, ÄÄÆÄÀÏ·¯´Â ¿¡·¯¸¦ ¸®ÅÏÇϸç ÄÄÆÄÀÏ ½ÇÆÐ ÇÒ°ÍÀÌ´Ù.


3.2절. ¹è¿­°ú Æ÷ÀÎÅÍ´Â µ¿ÀÏÇÏ´Ù

¿¹Á¦ mem.c ¿¡¼­ º¯¼ö a ´Â 4ÀÇ Å©±â¸¦ °¡Áö´Â ¹è¿­·Î ¼±¾ðµÇÀÖ´Ù. ¹è¿­Àº Æ÷ÀÎÅͰú µ¿ÀÏÇÏ°Ô »ç¿ë°¡´ÉÇÏ´Ù. Áï a[0] Àº *a ¿Í °°À¸¸ç, a[1] Àº *(a+1) °ú µ¿ÀÏÇÏ´Ù.

¾ÕÀå¿¡¼­ Æ÷ÀÎÅÍ ¿¬»êÀ» ÇÒ¶§ *a+1 Àº Æ÷ÀÎÅÍ ¿¬»êÀÌ ¾Æ´Ï¶ó°í Çߴµ¥, ±× ÀÌÀ¯´Â *a+1 Àº a[1] ÀÌ ¾Æ´Ï°í a[0] + 1 ÀÌ µÇ±â ¶§¹®ÀÌ´Ù.