C언어 - 포인터(Pointer)

Programming/C 2016. 5. 14. 10:00

<포인터란?>

 

포인터는 주소를 저장하는 변수이다. 변수? 그렇다. 변수는 어떤 데이터를 저장하기 위한 사용자들이 만든 공간으로 주로 우리는 숫자, 문자등을 저장하여 사용하였다.

그 개념을 그대로 변수에 주소를 저장하는 것이다.

 

포인터 변수의 선언에 대해 알아보자.

구조) int* pointer = NULL;

int : 포인터 변수는 주소를 저장하는 변수이다. 그런데 왠 int? 이 자료형은 pointer라는 포인터 변수에 주소를 참조했을때 나타내는 값이 int형이다 라는 의미이다.

pointer : 포인터 변수 이름

NULL : NULL로 초기화 함.

해석 : pointer라는 포인터 변수에 NULL이라는 아무것도 저장하지 않겠다라는 의미이다. , 빈깡통!

 

 

<실습>

실습을 통해 포인터 변수가 어떻게 사용되는지 알아보자

 


 

-결과-



 

결과값을 보면 포인터 변수의 값이랑 변수a의 주소와 같은 값이 출력되는 것을 알 수 있다.

이렇듯이 포인터 변수는 변수들의 주소를 저장하는 변수이다!

참고로 모든 포인터 변수의 공간은 4바이트이다. 주소체계를 저장할 수 있으면 되므로 4바이트면 된다.

 

<실습>

이번 실습에서는 포인터 변수를 이용하여 값을 참조해보자!

 



-결과-

 

위 코드를 살펴보자. num1, num2, num3의 변수를 각각 생성하고, 포인터변수 p만을 통해 모든 변수에 값을 대입하고 있다. 즉 간접 접근을 통해서 각각 대상이 바뀌고 바뀌는 대상에 대해 값을 넣어주었다.

 

 

 

<포인터를 사용할 때 주의할 사항>

 

1. 포인터 변수에 주소를 저장하지 않은 경우이다.

#include <stdio.h>

int main()

{

   int* p=NULL;

   *p=100;

   return 0;

}

이렇듯 포인터 변수 p에 아무 주소도 저장하지 않은 채포인터 변수의 참조 값에 100을 저장하려고 하면 당연히 에러가 난다. 왜냐? 참조하는 주소가 없는데 뭘 참조해서 넣겠다는건지...

 

2. 포인터 변수에 임의로 주소를 저장한 경우이다.

#include <stdio.h>

int main()

{

   int* p=124532;  // 이렇듯 임의로 주소를 저장한다.

   *p=100;

   return 0;

}

포인터 변수에 저장되는 주소는 메모리 상에 존재하는 주소여야 하기 때문에 124532이런 주소는 어떤 주소인지 알 수 없기 때문에 에러가 난다.



posted by 경원구