¿©·¯ºÐÀº 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 | ||
¿©·¯ºÐÀÌ ¿©±â¼ ±â¾ïÇÏ¼Å¾ß ÇÏ´Â °ÍÀº ÁÖ¼Ò¸¦ ´ãÀ» ¼ö ÀÖ´Â º¯¼ö¸¦ ¸¸µé±â À§Çؼ Æ÷ÀÎÅ͸¦ »ç¿ëÇÑ´Ù´Â °ÍÀÔ´Ï´Ù. ±×¸®°í ƯÁ¤ º¯¼öÀÇ Æ÷ÀÎÅ͸¦ °¡Áö°í ÀÖ´Ù¸é º¯¼ö¸¦ ÀÌ¿ëÇÏ´Â °ÍÀ̳ª Æ÷ÀÎÅ͸¦ ÀÌ¿ëÇÏ´Â °ÍÀ̳ª ¶È°°´Ù´Â °ÍÀÔ´Ï´Ù.
ÀÌ¿Í °°ÀÌ Æ÷ÀÎÅÍ´Â ÁÖ¼Ò¸¦ Á÷Á¢ °¡¸£Å°±â À§ÇÑ ¹æ¹ýÀÔ´Ï´Ù. ÀÌ·¯ÇÑ ¹æ¹ýÀÇ ¹®Á¦Á¡Àº »ç¿ëÀÚ°¡