E D R , A S I H C RSS

날다람� 6월9�

ZeroPage (새싹-날다람� 6월 9�)

��터(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


}


배열과 ��터

배열� 여러개� 변수가 모� 형태�다.
10003
10044
10082
10121
10168

� int a5 = {3, 4, 2, 1, 8};� 선언한 형태�다.
여기서 주목할 ì �ì�€ 우리가 ìœë ¥í•  때
printf("%d", a0);
와 같� 배열� 번지수를 �어주어야 한다는건�
왜 printf("%d", a); 와 같� �으면 안�는지 알아보�.
a == &a0
��는 것� 외우�� 하고
int* ap = a;

�고 한다면 ap�는 a� 첫 번째 변수(a0)� 주소가 들어가게 �다.
물론 ìœë ¥í•  때는 printf("%d", *ap); 와 ê°™ì�´ a0ì�„ ìœë ¥í•  수ë�„ 있다.
�것� �릭터, �블 등 다른 변수�� 모� �용�다.


과제

(맨 밑� 고치기 버튼� 누르면 수정할 수 있고, �기 �름 밑� 내용 쓰기. 위� 내용� 바꿔� �지만 책임못� ㅋㅋ)

��터를 �용한 간단한 프로그램

ì�´ë¦„ê³¼ ë°˜ì�„ 3ê°œ 입력받고 í�¬ì�¸í„°ë¥¼ ì�´ìš©í•´ì„œ editë�¼ëŠ” 함수 안ì—�서 2번째 입력받ì�€ 사람ì�„ 수정한 후 다시 ìœë ¥í•˜ê¸°. 예) 유정ì„� 1
�지� 3
김윤� 5
- 2번째 사람� 수정해 주세요 -
장다예 4
- ê²°ê³¼ -
유정� 1
장다예 4
김윤� 5

배열� ��� ��터로?!

바로 위ì�˜ ë°°ì—´ì�„ 모ë‘� ìœë ¥í•˜ëŠ”ë�°, printf("%d", *(ap + @))ì�˜ 형태로 ìœë ¥í•´ë³´ìž�. 여기서 모든 값들ì�„ ìœë ¥í•˜ë ¤ë©´ @ì—� ê°�ê°� ì–´ë–¤ 수가 들어가는지 ì§�ì ‘ í•´ë³´ê³  왜 그런지 설명하기.




김�훈


김윤�

배열� ��� ��터로 :

#include <stdio.h>

int main()
{
int a5 = {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 Name110, Name210, Name310;//�름

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;
}

�지�


장다예



Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:28:53
Processing time 0.0086 sec