본문 바로가기
프로그래밍/C , C++

너무나도 중요한 포인터 !!

by 힝고니 2010. 6. 6.


포인터는 선언된 자료형을 따라간다.

예를들어 int 형 변수의 포인터를 만들고 싶으면 int 형 포인터를 만들어야 한다.

포인터는 주소를 이용하여 사용하는 것이다.

int *p = 0; 이런식으로 포인터를 초기화할때 0 은 Null 값을 뜻한다.(\0)

고로 이 포인터는 아직 아무 주소도 가르키지 않고 있는것이다.

int A = 100;

int *p = &A;                  이렇게 되면 포인터 p 는 A의 주소를 가져오게 된다. p의 값은 A의 주소가 들어가게 된다.

-------------------------------------------------------------------------------------------------------&p = p의 주소값이 반환된다.
-------------------------------------------------------------------------------------------------------
p =  p가 가르키고 있는것의 주소를 말한다. 현재 A를 가르키고 있으니 A의 주소값이 반환된다.
      포인터는 무조건 4바이트 이다.
-------------------------------------------------------------------------------------------------------
*p = 가르키고 있는 주소의 변수가 가지고 있는 값. A를 가르키고 있으니 A의 값이 반환되는 것이다.
      여기서는 A의 값인 100 이 반환될 것이다.
-------------------------------------------------------------------------------------------------------p++;

이경우에는 p가 가르키는 변수의 값을 증가시키는것이 아니라 p의 값에 1을 더하는 것인데,
현재 p에는 A의 주소가 들어있으니 A의 주소 +1 이 되는것이다.

만약 p 가 Ox11223344 를 가르키고 있었다면 Ox11223345 를 가르키는 것으로 변경되는 것이다.

-------------------------------------------------------------------------------------------------------

배열을 포인터로 사용할경우.

int A[10] 이란 배열이 있을경우 int *p = A; 이렇게 되있다면 p는 A[0]의 주소값을 가져오게 된다.

이럴경우 A[1]의 주소값은 당연히 p+1 이 되는것이다.

A[1]가 가지고 있는 값은 *(p+1) 이 되는것이다.

-------------------------------------------------------------------------------------------------------

포인터를 사용하여 값을 변경하는 경우 그 포인터가 가지고있는 주소를 사용하는 것이기 때문에 가르키고 있는 값이

수정이 되는 것이다.

int A = 0;
int *p = &A;
이렇게 A 의 주소를 받아오는 포인터 p 를 만든 후에

*p = 100;
이런식으로 값을 수정하였다면 *p는 가르키고 있는 변수의 값이라고 했으니

A의 값이 바뀌게 되는 것이다.

따라서 *p = 100; 은 A = 100; 과 같은 말이 된다.

-------------------------------------------------------------------------------------------------------

포인터는 아주 중요한 내용이고 계속해서 사용하기 때문에 반드시 알아야 한다.

처음 입문자가 포인터를 어렵게 느낄수도 있겠지만 직접 코딩을 해보면서 확인해보면 금방 익힐수 있을것이다.

아주 간단한 예제를 올릴테니 이걸 보면서 포인터 이해에 도움이 되었으면 좋겠다.

실행해 보고 나오는 결과값을 보면서 이해하기 바란다. 직접 손으로 코딩해보는것이 빨리 이해하고 실력향상이 되는

지름길 이다. 절대 눈으로만 읽어서는 쉽게 이해되고 실력이 늘지 않는다....

-------------------------------------------------------------------------------------------------------

#include <stdio.h>

void main()
{
 int A = 100;
 int *p = &A;

 printf("초기 A의 값 : %d\n\n",A);


 printf("A를 가르키는 포인터 P를 만듬\nP가 가지고 있는 값 : %d\nA의 주소값 : %d\nP의 주소값 : %d\n\n",p,&A,&p);

 *p = 10;

 printf("*P = 10\nA의 값 : %d\n",A);

}