¼Ò¼³°°ÀºC#  Á¦2°­ÀÇ Å¬·¡½ºÀÇ ±âº»¹è°æ  24. ÂüÁ¶Å¸ÀÔ°ú Æ÷ÀÎÅÍ  

 

 

2.24 ÂüÁ¶Å¸ÀÔ¿Í Æ÷ÀÎÅÍ

 

 

¿©·¯ºÐÀº 2.13Àý¿¡¼­ ÂüÁ¶Å¸ÀÔ¿¡ ´ëÇØ¼­ ¾Ë¾Æ º¸¾Ò½À´Ï´Ù. ÀÌ Àý¿¡¼­´Â Æ÷ÀÎÅÍ¿Í ÂüÁ¶Å¸ÀÔ¿¡ ´ëÇØ¼­ ³íÇØ º¸µµ·Ï ÇϰڽÀ´Ï´Ù. unsafe¿Í fixed Ű¿öµå¸¦ ¹è¿ì¸é¼­ ¿ÀÈ÷·Á Æ÷ÀÎÅÍ¿¡ ´ëÇØ¼­ ±Ã±ÝÇϽŠºÐÀÌ ¸¹À¸¸®¶ó »ý°¢µË´Ï´Ù.

 

Æ÷ÀÎÅÍ¿Í ÂüÁ¶Å¸ÀÔÀº °ÅÀÇ ºñ½ÁÇÑ À¯ÇüÀ» °¡Áö°í ÀÖ½À´Ï´Ù. ÇÏÁö¸¸ ÂüÁ¶Å¸ÀÔÀº Æ÷ÀÎÅÍÀÇ ÈĹè Á¤µµ·Î »ý°¢ÇÏ½Ã¸é µË´Ï´Ù. ¸Þ¸ð¸®´Â Àüü°¡ ÁÖ¼Ò·Î ÀÌ·ç¾îÁ® ÀÖ°í ÀÌ ÁÖ¼Ò¸¦ °¡¸®Å°´Â º¯¼ö°¡ Æ÷ÀÎÅͰ¡ µË´Ï´Ù. ±×¸®°í Æ÷ÀÎÅ͸¦ ´Ù½Ã °¡¸®Å°´Â °ÍÀÌ ÂüÁ¶Å¸ÀÔÀÌ µË´Ï´Ù. ¿©·¯ºÐÀÌ ÂüÁ¶Å¸ÀÔÀ» ¹è¿üÀ¸¸é¼­µµ ÂüÁ¶Å¸ÀÔ¿¡ ´ëÇØ¼­ ÀÌÇØ¸¦ ¸øÇϽô ÀÌÀ¯´Â ¹Ù·Î C#¿¡¼­ ¹ß»ýÇÏ´Â ÂüÁ¶°¡ °ÅÀÇ ³»ºÎÀûÀ¸·Î ÀÌ·çÁö°í ÀÖÀ¸¸ç ÂüÁ¶Å¸ÀÔÀÇ Ã»¼Ò ¶ÇÇÑ ³»ºÎÀûÀ¸·Î °¡ºñÁö ÄÝ·ºÅͰ¡ Çϱ⠶§¹®ÀÔ´Ï´Ù.

 

ÀÚ! ±×·¸´Ù¸é Æ÷ÀÎÅͺÎÅÍ Á÷Á¢ÀûÀ¸·Î ³íÇØ º¸µµ·Ï ÇϰڽÀ´Ï´Ù. Æ÷ÀÎÅÍÀÇ Á¤ÀǸ¦ ³»·Áº¸µµ·Ï ÇÏÁÒ. Æ÷ÀÎÅͶõ ÁÖ¼Òº¯¼ö(Address Variable)¸¦ ¸»ÇÕ´Ï´Ù. ÀÌ ¸»¹Û¿¡´Â ´õ ÇÒ ¸»ÀÌ ¾ø±º¿ä. ¿©·¯ºÐµéÀÌ Æ÷ÀÎÅ͸¦ ¾î·Æ°Ô »ý°¢ÇÏ´Â ÀÌÀ¯°¡ ¹Ù·Î ÁÖ¼Òº¯¼ö¶ó´Â ¸»À» ½±°Ô ¸Á°¢Çϱ⠶§¹®ÀÏ °ÍÀÔ´Ï´Ù. ÀϹÝÀûÀÎ º¯¼ö¸¦ »ý°¢ÇØ º¸ÁÒ. ÀϹÝÀûÀÎ º¯¼ö¿¡´Â »ó¼ö°ªÀÌ ³ÖÀ» ¼ö ÀÖ½À´Ï´Ù. Áï, ´ÙÀ½°ú °°Àº °æ¿ì¿¡´Â 100À̶ó´Â ¼ýÀÚ »ó¼ö°¡ µé¾î°¡´Â °ÍÀÔ´Ï´Ù.

 

n                 int a = 100;

 

ÇÏÁö¸¸ Æ÷ÀÎÅÍ´Â ÁÖ¼Òº¯¼öÀ̱⠶§¹®¿¡ ÁÖ¼Ò°ª¸¸À» ÇÒ´ç ÇÒ ¼ö ÀÖ½À´Ï´Ù. ³Ê¹«³ª ´ç¿¬ÇÑ ¼Ò¸®ÀÔ´Ï´Ù. ±×·¸´Ù¸é aÀÇ ÁÖ¼Ò´Â ¾îµð¼­ ã¾Æ º¼ ¼ö ÀÖÀ»±î¿ä. ´ÙÀ½°ú °°Àº ¿¹¹®À» Çѹø º¸½Ã±â ¹Ù¶ø´Ï´Ù.

 

&

PointTest.cs

Ü int*¿Í ÁÖ¼Ò¿¬»êÀÚ &¸¦ Å×½ºÆ®ÇÏ´Â ¿¹Á¦

using System;

class  PointTest{

        unsafe public static void Main() {

                       int x1 = 10;

                       int* p = &x1;

                               Console.WriteLine("1. x1ÀÇ 16Áø¼öÁÖ¼Ò: {0:X}", (int)&x1);

                               Console.WriteLine("2. Æ÷ÀÎÅÍ pÀÇ °ª: {0:X}", (int)p);

        }//main

}//class

C:\C#Example\02>csc /unsafe PointTest.cs

C:\C#Example\02>PointTest

1. x1ÀÇ 16Áø¼öÁÖ¼Ò: 12F8C8

2. Æ÷ÀÎÅÍ pÀÇ °ª: 12F8C8

 

x1¿¡´Â °ª 10ÀÌ µé¾î ÀÖ½À´Ï´Ù. ±×¸®°í &x1Àº ¸Þ¸ð¸®»ó¿¡ Á¸ÀçÇÏ´Â x1ÀÇ ÁÖ¼Ò¸¦ ÀǹÌÇÕ´Ï´Ù. À̰ÍÀ» Á¤¸®ÇÏ¸é ´ÙÀ½°ú °°ÀÌ ³ªÅ¸ ³¾ ¼ö ÀÖ½À´Ï´Ù.

.

 

 

±×¸² 2-9 ÁÖ¼Ò¿Í Æ÷ÀÎÅÍ

 

int* p = &x1À̶ó´Â ±¸¹®¿¡¼­ ¿©·¯ºÐÀÌ ÁÖÀÇ ÇÏ½Ç °ÍÀº int* ±îÁö°¡ µ¥ÀÌÅÍ Å¸ÀÔÀÌ¸ç ±×¸®°í p´Â ÁÖ¼Ò¸¸À» ³ÖÀ» ¼ö ÀÖ´Â º¯¼ö¶ó´Â °ÍÀÔ´Ï´Ù. ±×°Íµµ intÇü ÁÖ¼Ò¸¸À» ³ÖÀ» ¼ö ÀÖ´Â ÁÖ¼Òº¯¼öÀ̱⠶§¹®¿¡ µ¥ÀÌÅÍ Å¸ÀÔÀÌ int* ·Î Ç¥ÇöµÈ´Ù´Â °ÍÀÔ´Ï´Ù. ±×·¸±â ¶§¹®¿¡ À§¿¡¼­ ¾ð±ÞÇÑ int*  p = &x1À» ´ÙÀ½°ú °°ÀÌ µÎ Áٷεµ ³ªÅ¸³¾ ¼ö ÀÖ½À´Ï´Ù.

 

n                 int*  p ;

n                 p= &x1;

 

º¸Åë Æ÷ÀÎÅ͸¦ »ç¿ëÇÒ ¶§ int   *p¿Í °°ÀÌ Æ÷ÀÎÅÍ Ç¥½Ã¸¦ Æ÷ÀÎÅÍ º¯¼ö ¹Ù·Î ¾Õ¿¡ ºÙÀÌ´Â °ÍÀº ¿À·ù´Â ¾Æ´ÏÁö¸¸ È¥µ¿ÇÒ ¿ä¼Ò°¡ ¸¹Àº Ç¥ÇöÀÔ´Ï´Ù. ±×·¸±â ¶§¹®¿¡ ¿©·¯ºÐµéÀÌ È¤½Ã Æ÷ÀÎÅ͸¦ »ç¿ëÇϽŴٸé int* p¿Í °°ÀÌ ÄÚµù¿¡¼­ »ç¿ëÇϽô °ÍÀÌ ¹Ù¶÷Á÷ ÇÒ °ÍÀÔ´Ï´Ù. ÀÌÀ¯´Â int* ±îÁö°¡ µ¥ÀÌÅÍ Å¸ÀÔÀ̱⠶§¹®ÀÔ´Ï´Ù.

 

Æ÷ÀÎÅ͸¦ »ç¿ëÇÒ ¶§ ¸¹ÀÌ È¥µ¿ÇϽô °ÍÀÌ ¹Ù·Î *p¶ó´Â Ç¥ÇöÀÔ´Ï´Ù. À̰ÍÀº ¾ö¿¬È÷ Æ÷ÀÎÅÍ º¯¼ö¸¦ ¼±¾ðÇÏ´Â °Í°ú´Â ÀüÇô ´Ù¸¥ °ÍÀÔ´Ï´Ù. ´ÙÀ½Àº ÀÌ µÎ °æ¿ì¸¦ ³ª¿­ÇÑ °ÍÀÌ´Ï ºñ±³ÇØ º¸½Ã±â ¹Ù¶ø´Ï´Ù.

 

n                 int* p = &x1; //int* Çü ÁÖ¼Ò º¯¼ö¸¦ ¼±¾ðÇϰí x1ÀÇ ÁÖ¼Ò¸¦ p¿¡ ÇÒ´ç.

n                 int temp = *p; //p ÁÖ¼Ò¿¡ °ªÀ» temp¶ó´Â º¯¼ö¿¡ ÇÒ´ç.

n                 *p = 1000; //p ÁÖ¼Ò¿¡ °ªÀ» 1000À¸·Î ÇÒ´ç

 

¢Ã int*  p ¿Í *p

q                int*   p

n                   intÇüÀÇ ÁÖ¼Ò¸¦ ´ãÀ» ¼ö ÀÖ´Â µ¥ÀÌÅÍŸÀÔÀÌ int*ÀÎ ÁÖ¼Òº¯¼ö p¸¦ ¼±¾ð

q                *p

n                   p°¡ ÁÖ¼Ò º¯¼öÀ̱⠶§¹®¿¡ ÁÖ¼Ò°ªÀÌ µé¾î°¥ ¼ö ÀÖÀ¸¸ç ÁÖ¼Ò¸¦ ÀÌ¿ëÇÏ¿© ÀÏ¹Ý intº¯¼öÈ­ ÇÏ´Â ¹æ¹ý

n                   *p = 3  ÀÌ ±¸¹®ÀÌ °¡´ÉÇÑ ÀÌÀ¯´Â *p´Â ÇØ´ç ÁÖ¼ÒÀÇ int º¯¼öÈ­ ÇÏ¿´´Ù.

n                   int a = *p °¡ °¡´ÉÇÑ ÀÌÀ¯ ¶ÇÇÑ °°Àº ¸Æ¶ôÀÌ´Ù.

 

À§ÀÇ ¼¼°¡Áö¸¦ ±¸ºÐÇÏ½Ã´Ù¸é ¿©·¯ºÐÀº Æ÷ÀÎÅÍÀÇ 80%¸¦ ÀÌÇØÇϽаÍÀÔ´Ï´Ù. *p¶ó´Â Ç¥ÇöÀº ÁÖ¼Ò¿¡ ´ëÇÑ °ªÀ¸·Î ÇØ¼®ÇÏ½Ã¸é µË´Ï´Ù. int*    p´Â ÁÖ¼Òº¯¼ö¸¦ ¼±¾ðÇÒ ¶§ÀÇ *À̸ç *pÀÇ *Àº ¹Ù·Î ÁÖ¼Ò¸¦ ÀÌ¿ëÇÏ¿© °ªÀ» ÇÚµéÇϱâ À§Çؼ­ »ç¿ëÇϴ ǥÇöÀÔ´Ï´Ù. ´ÙÀ½Àº ÀÌ·¯ÇÑ °ÍÀ» Ãß°¡ÇÏ¿© ÇÁ·Î±×·¥À» ¾à°£ ¼öÁ¤ÇÑ ¿¹Á¦ÀÔ´Ï´Ù.

 

&

AdvancePontTest.cs

Ü *p¸¦ Å×½ºÆ®Çϱâ À§ÇÑ ¿¹Á¦

using System;

class  AdvancePointTest{

           unsafe public static void Main() {

                     int x1 = 10;

                     int* p = &x1;

                            Console.WriteLine("1. x1ÀÇ 16Áø¼öÁÖ¼Ò: {0:X}", (int)&x1);

                            Console.WriteLine("2. Æ÷ÀÎÅÍ pÀÇ °ª: {0:X}", (int)p);

                     int temp = *p;

                            Console.WriteLine("3. p ÁÖ¼Ò¿¡ Æ÷ÇԵǾîÁø °ªÀ» int temp¿¡ ÇÒ´ç: {0}",temp);

                     *p = 1000;

                            Console.WriteLine("4. p ÁÖ¼Ò¿¡ Æ÷ÇԵǾîÁø °ªÀ» 1000À¸·Î ÇÒ´ç: {0}",*p);

                            Console.WriteLine("5. *p¿Í x1´Â °°Àº °ªÀ» °¡Áü: {0}",x1);

           }//main

}//class

C:\C#Example\02>csc /unsafe AdvancePointTest.cs

C:\C#Example\02>AdvancePointTest

1. x1ÀÇ 16Áø¼öÁÖ¼Ò: 12F8C8

2. Æ÷ÀÎÅÍ pÀÇ °ª: 12F8C8

3. p ÁÖ¼Ò¿¡ Æ÷ÇԵǾîÁø °ªÀ» int temp¿¡ ÇÒ´ç: 10

4. p ÁÖ¼Ò¿¡ Æ÷ÇԵǾîÁø °ªÀ» 1000À¸·Î ÇÒ´ç: 1000

5. *p¿Í x1´Â °°Àº °ªÀ» °¡Áü: 1000

 

¿©·¯ºÐÀÌ ¿©±â¼­ ±â¾ïÇÏ¼Å¾ß ÇÏ´Â °ÍÀº ÁÖ¼Ò¸¦ ´ãÀ» ¼ö ÀÖ´Â º¯¼ö¸¦ ¸¸µé±â À§Çؼ­ Æ÷ÀÎÅ͸¦ »ç¿ëÇÑ´Ù´Â °ÍÀÔ´Ï´Ù. ±×¸®°í ƯÁ¤ º¯¼öÀÇ Æ÷ÀÎÅ͸¦ °¡Áö°í ÀÖ´Ù¸é º¯¼ö¸¦ ÀÌ¿ëÇÏ´Â °ÍÀ̳ª Æ÷ÀÎÅ͸¦ ÀÌ¿ëÇÏ´Â °ÍÀ̳ª ¶È°°´Ù´Â °ÍÀÔ´Ï´Ù.

 

ÀÌ¿Í °°ÀÌ Æ÷ÀÎÅÍ´Â ÁÖ¼Ò¸¦ Á÷Á¢ °¡¸£Å°±â À§ÇÑ ¹æ¹ýÀÔ´Ï´Ù. ÀÌ·¯ÇÑ ¹æ¹ýÀÇ ¹®Á¦Á¡Àº »ç¿ëÀÚ°¡