[C] 포인터 활용

2021. 1. 6. 15:19프로그래밍 공부/C 공부

포인터 활용 예시

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

}

 

'프로그래밍 공부 > C 공부' 카테고리의 다른 글

[C] 문자, 문자열  (0) 2021.01.06
[C] void 포인터  (0) 2021.01.06
[C] 포인터 개념  (0) 2021.01.06
[C] if 조건문  (0) 2021.01.05
[C] 지역변수와 전역변수(+ extern, static, const)  (0) 2021.01.05