=== ZeroPage (새싹-ë‚ ë‹¤ëžŒì¥ 6ì›” 9ì¼) === [http://wiki.zeropage.org/wiki.php/%EC%9C%A0%EC%A0%95%EC%84%9D] -> 홈으로 = í¬ì¸í„°(Pointer)ì— ëŒ€í•´ì„œ. = í¬ì¸í„°ëž€? í¬ì¸í„°ëž€, ì–´ë–¤ ë³€ìˆ˜ì˜ '주소'를 참조하는 변수ì´ë‹¤. 예) || 주소 |||| 변수 |||| ë‚´ìš© || || 1000 |||| a |||| 13 || || 1004 |||| b |||| 14 || int a = 13; int b = 14; ì´ë¼ëŠ” ì„ ì–¸ì„ í†µí•´ 가능하며, 메모리 ìƒì˜ ì–´ë–¤ ì£¼ì†Œì— ìžˆëŠ” 13 ì´ë¼ëŠ” ë°ì´í„°ëŠ” aë¼ëŠ” ë³€ìˆ˜ì˜ ì´ë¦„ì„ í†µí•´ì„œ 나타내어진다. 여기서 주소가 1000 ì´í›„ì— 1004 ì¸ ì´ìœ 는 intê°€ 4byteì´ê¸° 때문ì´ë‹¤.(여기서 주소는 예를 ë“ ê²ƒìž„) a = 14; ë¼ëŠ” ëª…ë ¹ì–´ë¥¼ 통해 aì˜ ë‚´ìš©ì„ 14ë¡œ 바꿀 수 있다. ê·¸ë¦¬ê³ printf("%d", a); ë¼ëŠ” ëª…ë ¹ì–´ë¥¼ 통해 ë°”ë€ ê²ƒì„ í™•ì¸í• 수 있다. aë¼ëŠ” ê²ƒì€ aë¼ëŠ” 변수가 나타내는 주소(1000)ì˜ ë‚´ìš©ì„ ë‚˜íƒ€ë‚´ì£¼ëŠ” 것ì´ë‹¤. aì˜ ì£¼ì†Œë¥¼ 표현하는 방법ì—는 '&'ì„ ë¶™ì´ëŠ” ë°©ë²•ì´ ìžˆë‹¤. printf("%u", &a);ì˜ ê²°ê³¼ê°’ì€ 1000ì´ë‹¤.(%u 맞나? ã…‹ã…‹ 찾아보길. 맞ì„꺼야 %u는 ì£¼ì†Œê°’ì„ í‘œí˜„í•˜ëŠ” 표현ì‹.) í¬ì¸í„°ëŠ” *ë¼ëŠ” 문ìžë¥¼ 통해서 표현하는ë°, ë§Œì•½ì— INTí˜•ì˜ ì£¼ì†Œë¥¼ 나타내는 변수 IP를 ì„ ì–¸í•˜ê³ ì‹¶ìœ¼ë©´ int* ip; ë¼ê³ 표현하면 ëœë‹¤. int *ip; ë„ ê°€ëŠ¥í•œ 표현ì´ë‹¤.(ì´ê²Œ 약간 ë” ì˜³ì€ í‘œí˜„.) 예를 들어 int *ip, i; ì´ë ‡ê²Œ 하면 ë’¤ì˜ i는 ì¼ë°˜ì ì¸ intë¡œ, ì•žì˜ ip는 í¬ì¸í„° INT형으로 ì„ ì–¸ì´ ëœë‹¤. í¬ì¸í„°ê°€ 가리키는 ê³³ì˜ ê°’ì„ ì“¸ 때는 ì•žì— *ì„ ë¶™ì¸ë‹¤. 예) int a = 13; int* ap = &a; printf("%d %d", a, *ap); 결과값 : 13 13 하지만 í¬ì¸í„°ë¥¼ 왜'쓰는지 잘 모르는 경우가 많다.-_-; 함수 ë‚´ì—ì„œ ê°’ì„ ì•„ë¬´ë¦¬ ë°”ê¿”ë´¤ìž ì§€ì—변수 ì˜ ë‚´ìš©ì€ ë°”ë€Œì§€ 않는다. ì´ê²ƒì„ 어디서나 쓸 수 있게 하기 위해서. 예) void add(int a, int b, int* cp) { *cp = a + b; // cpë¼ëŠ” í¬ì¸í„°ê°€ 가리키는 ì£¼ì†Œì˜ ê°’ì„ a + bë¡œ 바꿔준다(main 함수 ì•ˆì˜ c). } int main() { int a = 13, b = 14, c; add(a, b, &c); // a와 bì˜ ê°’ì„, cì˜ ì£¼ì†Œë¥¼ 넣는다. printf("%d", c); // 결과값 : 27 } = ë°°ì—´ê³¼ í¬ì¸í„° = ë°°ì—´ì€ ì—¬ëŸ¬ê°œì˜ ë³€ìˆ˜ê°€ ëª¨ì¸ í˜•íƒœì´ë‹¤. ||1000||||3|| ||1004||||4|| ||1008||||2|| ||1012||||1|| ||1016||||8|| ì€ int a[5] = {3, 4, 2, 1, 8};ì„ ì„ ì–¸í•œ 형태ì´ë‹¤. 여기서 ì£¼ëª©í• ì ì€ ìš°ë¦¬ê°€ ì¶œë ¥í• ë•Œ printf("%d", a[0]); 와 ê°™ì´ ë°°ì—´ì˜ ë²ˆì§€ìˆ˜ë¥¼ ì 어주어야 í•œë‹¤ëŠ”ê±´ë° ì™œ printf("%d", a); 와 ê°™ì´ ì 으면 안ë˜ëŠ”지 알아보ìž. a == &a[0] ì´ë¼ëŠ” ê²ƒì„ ì™¸ìš°ë„ë¡ í•˜ê³ int* ap = a; ë¼ê³ 한다면 apì—는 aì˜ ì²« 번째 변수(a[0])ì˜ ì£¼ì†Œê°€ 들어가게 ëœë‹¤. ë¬¼ë¡ ì¶œë ¥í• ë•ŒëŠ” printf("%d", *ap); 와 ê°™ì´ a[0]ì„ ì¶œë ¥í• ìˆ˜ë„ ìžˆë‹¤. ì´ê²ƒì€ ìºë¦í„°, ë”블 등 다른 변수ì—ë„ ëª¨ë‘ ì ìš©ëœë‹¤. === ê³¼ì œ === (맨 ë°‘ì˜ ê³ ì¹˜ê¸° ë²„íŠ¼ì„ ëˆ„ë¥´ë©´ ìˆ˜ì •í• ìˆ˜ ìžˆê³ , ìžê¸° ì´ë¦„ ë°‘ì— ë‚´ìš© 쓰기. ìœ„ì˜ ë‚´ìš©ì€ ë°”ê¿”ë„ ë˜ì§€ë§Œ ì±…ìž„ëª»ì§ ã…‹ã…‹) = í¬ì¸í„°ë¥¼ ì´ìš©í•œ 간단한 프로그램 = ì´ë¦„ê³¼ ë°˜ì„ 3ê°œ ìž…ë ¥ë°›ê³ í¬ì¸í„°ë¥¼ ì´ìš©í•´ì„œ editë¼ëŠ” 함수 안ì—ì„œ 2번째 ìž…ë ¥ë°›ì€ ì‚¬ëžŒì„ ìˆ˜ì •í•œ 후 다시 ì¶œë ¥í•˜ê¸°. 예) ìœ ì •ì„ 1 ì´ì§€ì€ 3 ê¹€ìœ¤ì„ 5 - 2번째 ì‚¬ëžŒì„ ìˆ˜ì •í•´ 주세요 - 장다예 4 - ê²°ê³¼ - ìœ ì •ì„ 1 장다예 4 ê¹€ìœ¤ì„ 5 = ë°°ì—´ì˜ ì´ë™ì„ í¬ì¸í„°ë¡œ?! = 바로 ìœ„ì˜ ë°°ì—´ì„ ëª¨ë‘ ì¶œë ¥í•˜ëŠ”ë°, printf("%d", *(ap + @))ì˜ í˜•íƒœë¡œ ì¶œë ¥í•´ë³´ìž. 여기서 ëª¨ë“ ê°’ë“¤ì„ ì¶œë ¥í•˜ë ¤ë©´ @ì— ê°ê° ì–´ë–¤ 수가 들어가는지 ì§ì ‘ í•´ë³´ê³ ì™œ 그런지 설명하기. == ê¹€ìƒí›ˆ == == ê¹€ìœ¤ì„ == ë°°ì—´ì˜ ì´ë™ì„ í¬ì¸í„°ë¡œ : #include <stdio.h> int main() { int a[5] = {3,4,2,1,8}; int* ap = a; printf("%d\n", *ap); printf("%d\n", *(ap+1)); printf("%d\n", *(ap+2)); printf("%d\n", *(ap+3)); printf("%d\n", *(ap+4)); return 0; } //ì •ì„: 여기서 ap+1 ì—ì„œì˜ 1 ì€ 1byteì˜ 1ì´ ì•„ë‹ˆë¼ sizeof(int) * 1 ì˜ 1ì´ë‹¤. ë”°ë¼ì„œ for문 형태로 ìž‘ì„±í• ë•ŒëŠ” ap + ië¡œ 하면 ëœë‹¤. í¬ì¸í„°ë¥¼ ì´ìš©í•œ 간단한 프로그램 #include <stdio.h> void edit(char *NameC, int *NumC) { printf("\në‘번째 ìž…ë ¥í•œ ì´ë¦„ê³¼ 숫ìžë¥¼ 바꿉니다. : "); scanf("%s %d", NameC, NumC);// í¬ì¸í„°ì´ë¯€ë¡œ '&' 를 붙ì´ì§€ 않는다. } int main() { char Name1[10], Name2[10], Name3[10];//ì´ë¦„ char *NameC;//변환ë ì´ë¦„ int Num1, Num2, Num3;//ìˆ«ìž int *NumC;//변환ë ìˆ«ìž printf("첫번째 ì‚¬ëžŒì˜ ì´ë¦„ê³¼ 숫ìžë¥¼ ìž…ë ¥í•´ì£¼ì„¸ìš” : "); scanf("%s %d", Name1, &Num1); printf("\në‘번째 ì‚¬ëžŒì˜ ì´ë¦„ê³¼ 숫ìžë¥¼ ìž…ë ¥í•´ì£¼ì„¸ìš” : "); scanf("%s %d", Name2, &Num2); printf("\n세번째 ì‚¬ëžŒì˜ ì´ë¦„ê³¼ 숫ìžë¥¼ ìž…ë ¥í•´ì£¼ì„¸ìš” : "); scanf("%s %d", Name3, &Num3); NameC = Name2;//ë°°ì—´ë„ ì¼ì¢…ì˜ í¬ì¸í„°ì´ë¯€ë¡œ Name2 ì•žì— '&' ì„ ë¶™ì´ì§€ 않는다. NumC = &Num2;//Num2는 í¬ì¸í„°ê°€ 아니므로 '&' ì„ ì•žì— ë¶™ì—¬ì•¼ 한다. edit(NameC, NumC);// NameC 와 NumC, 즉 주소를 edit함수로 ì „ë‹¬. printf("\në°”ë€ ê²°ê³¼ : %s %d %s %d %s %d\n", Name1, Num1, Name2, Num2, Name3, Num3); return 0; } == ì´ì§€ì€ == == 장다예 ==