본문 바로가기

코딩/데이터 구조

2. 데이터 구조 - 포인터의 개념과 swap 함수 만들어 보기

728x90
반응형

데이터 구조를 처음 시작 할때 기본적으로 알아야 하는 것들은 많다.

순환, 구조체, 배열, 포인터 를 대표적으로 뽑을 수 있는데, 이들 중 포인터에 대해서 이야기 해보려고 한다.

 

1. 포인터 : 다른 변수의 주소를 가지고 있는 변수

int a = 100;

int *p; // p는 int형을 가리키는 포인터 라는 것을 정의!!

p = &a; // 변수의 주소는 & 연산자를 변수에 적용시켜서 추출 할 수 있다.

 

포인터에서 중요한 개념 두가지!  &연산자 , *연산자

&연산자 - 주소 연산자

&연산자는 변수의 주소를 추출하는 연산자이다.

 

p라는 것은 이제 "주소" 만 가리킬 수 있는 화살표인데, 그 화살표가 a의 주소를 가리키게 만들고 싶으면,

"p = &a" ,즉 &를 통해서 a의 주소를 추출한 후 이것을 p라는 화살표랑 매치한다.

 

포인터설명
포인터 설명

 

* 연산자 - 간접참조 연산자

*연산자는 포인터가 가리키는 장소에 값을 저장하는 연산자이다.

예를 들어 p가 가리키는 장소에 200을 저장하려면 *p = 200; 라고 하면 된다. 

 

swap 함수 만들어 보기

#include <stdio.h>

void swap(int* px, int* py) { //두개의 포인터를 선언!
	int tmp;
	tmp = *px;
	*px = *py;
	*py = tmp;
}

int main(void) {
	int a = 1;
	int b = 2;

	printf("%d %d\n", a, b);

	swap(&a, &b); // a, b가 가리키고 있는 두 값을 가져와야 하기 때문에 &를 쓴 것!

	printf("%d %d", a, b);
}

 

결과는 밑과 같다.

1  2

2  1

 

즉 값이 swap 됬다는 것을 알 수 있다.

반응형