프로그래밍 공부/C 공부
[C] 포인터 활용
alchang
2021. 1. 6. 15:19
포인터 활용 예시
(1) 함수내의 지역변수 변경
아래의 경우 main에서 func를 호출하고 매개변수 data에 corn을 대입하였을 경우 cream은 10으로 되겠지만, 그 아래행 corn = 4에서 오류가 발생한다.
#include <stdio.h>
void func(short data) ;
void main()
{
short corn = 10;
func(corn);
}
void func(short data)
{
short cream = 0 ;
cream = data ;
corn = 4 ;
}
하지만 포인터를 활용한다면 func는 ptr이라는 포인터를 매개변수고 갖고, 이 포인터에는 corn의 메모리 주소가 할당된다.
cream = *ptr은 cream에 포인터가 가리키는 데이터를 할당하므로 cream = 10을 의미하며, 그 아래행은 포인터가 가리키는 주소의 데이터를 변경하기 때문에 corn = 4로 변경된다.
#include <stdio.h>
void func(short *ptr) ;
void main()
{
short corn = 10;
func(&corn);
}
void func(short *ptr)
{
short cream = 0 ;
cream = *ptr ;
*ptr = 4 ;
}
(2) 두 변수의 값을 변경하는 함수(swap) 구현
두 변수의 값을 바꿔야하는 상황에서 활용할 수 있음. 만약 포인터를 활용하지 않는다면 함수를 이용해 변수를 변경할 수 없음. 함수를 이용할 수 없다면 코드의 활용성이 떨어질 수 있으므로, 포인터를 활용하는것이 유리함.
#include <stdio.h>
char swap(char *pb, char *ps);
char main()
{
char big = 5;
char small = 15;
big < small && swap(&big, &small); // if문보다는 조건수식을 활용
printf("big은 %d 이므로 small %d 보다 큽니다.\n", big, small);
}
char swap(char *pb, char *ps)
{
char tmp = *pb;
*pb = *ps;
*ps = tmp;
return 0;
}