티스토리 뷰
c언어 - 포인터 정리 및 간단한 예제
[포인터(Pointer)]
C언어에서는 간접 주소 지정 방식으로 포인터(Pointer)라는 문법을 제공합니다.
사용자가 사용하고 싶은 메모리의 주소를 저장하고 있는 변수입니다.
int *ptr; |
-> 자료형이 int인 ptr 포인터 변수 선언
포인터는 값이 아닌 주소를 저장하는 데 쓰입니다.
변수의 메모리 주소를 출력해보겠습니다.
#include <stdio.h>
int main(void)
{
int a;
int* ptr; // 포인트 변수 선언
ptr = &a; // 변수 a의 주소를 ptr에 대임
printf("변수 a의 주소는 : %d", ptr);
// a의 주소값 출력
return 0;
}
|
cs |

위의 예제는
일반 변수 a를 만들어주었고
포인터 변수 ptr을 만들어주었습니다.
그리고 a의 주소 값을 ptr에 저장해
a의 주소를 출력시켜보았습니다.
a의 주소는 16186908이라는 것을 알 수 있습니다.
그러면 만약 위의 예제에서 a에 3을 넣고
포인터를 사용해 a에 들어있는 값인 3을 출력시키려면
어떻게 해야 하는지 알아보겠습니다.
int main(void)
{
int a = 3;
int* ptr;
ptr = &a;
printf("변수 a의 주소는 : %d \n", ptr);
printf("a의 값은 : %d \n", *ptr);
return 0;
}
|
cs |
이 코드를 보면 결과적으로
ptr : 포인터 변수가 가리키는 대상의 주소를 나타내고,
*ptr : 포인터가 가리키는 대상의 값을 나타내는 것을 알 수 있습니다.
여기까지 정리해 보자면
int a=3; // int형 a를 선언하고 a에 3을 대입해준다. int *ptr; // int형 포인터 변수 ptr을 선언해준다. ptr = &a; // 포인터 변수 ptr에 변수 a의 주소를 대입시켜준다. *ptr = 5; // ptr에 저장된 주소로 이동해 5를 대입 (a에 들어가 있는 3을 5로 바꾸어줄 수 있다.) |
이처럼 정리해볼 수 있습니다.
[코드 예제]
여기까지 간단하게 포인터를 정리해보았습니다.
다음 예제를 통해 간접 주소 방식인 포인터가 쓰이는 이유에 대해 한번 알아보겠습니다.
먼저 a 값과 b 값을 교환하는 스왑 함수를 만들어보겠습니다.
#include <stdio.h>
void swap(int a, int b)
{
int temp;
temp = a;
a = b;
b = temp;
}
int main(void)
{
int n = 3, m = 5;
printf(" 값을 교환하기 전 값 n : %d , m : %d\n",n,m);
swap(n, m);
printf(" 값을 교환한 후 값 n : %d , m : %d", n, m);
return 0;
}
|
cs |
이처럼 함수를 이용해서 a b를 교환하는 스왑함수를 만들어보았습니다.
얼핏 보면 n과 m값이 교환될 것으로 보이지만 실제로 출력시켜보면

결과값이
교환하기 전 값이 n은 3 m은 5 이고
교환한 후에도 n은 3 m은 5인 것을 보실 수 있습니다.
결과적으로 값이 바뀌지 않았습니다.
얼핏 보면 값이 함수로 넘어가 교환이 된 후에
다시 메인 함수로 값이 넘어온 것처럼 보일 수 있겠지만
함수에서 a b 값이 교환은 되었지만
다시 메인 함수로 교환된 값이 넘어오지 못한 것입니다.
이 같은 문제를 해결하기 위해서
간접 주소 지정방식인 포인터(Pointer)가 사용되는 것입니다.
포인터를 사용해 위의 문제를 해결해 보겠습니다.
#include <stdio.h>
void swap(int *a, int *b)
{
int temp;
temp = *a;
*a = *b;
*b = temp;
}
int main(void)
{
int n = 3, m = 5;
printf(" 값을 교환하기 전 값 n : %d , m : %d\n",n,m);
swap(&n, &m);
printf(" 값을 교환한 후 값 n : %d , m : %d", n, m);
return 0;
}
|
cs |
n과 m 앞에 &를 적어주었고
swap 함수안의 a와 b 앞에는 *를 적어줘 코드를 바꾸었습니다.
결과값이 아래와 같이 바뀐 것을 보실 수 있습니다.

간접 주소 지정방식인 포인터를 사용해 n 와 m을 바꾸어 보았습니다.
위의 예제는 포인터를 배우는데 가장 기본적으로 많이 쓰이는 예제입니다.
위의 예제를 한번 적어보시고
공부해보신다면
기본적인 포인터 문법을 이해하실 수 있을 것입니다.
이상 포인터에 대해 간단하게 알아보았습니다 ~:)
'프로그래밍 > c 언어' 카테고리의 다른 글
c언어 정리 기초 - 표준 입출력(printf , scanf) (0) | 2020.02.11 |
---|---|
c언어 - 배열 기초 예제 (2) | 2020.02.09 |
c언어 정리 기초 - 반복문(for, while, do~while) (0) | 2020.02.02 |
c언어 정리 기초 - 연산자 (0) | 2020.02.01 |
c언어 - 함수(function) 예제 (0) | 2020.01.29 |