본문 바로가기

카테고리 없음

C : 포인터 이해하기

메모리의 주소를 저장하기 위한 변수를 포인터라 한다.


선언

type* name;

type *name;

type * name;

위의 3가지 방법 모두 포인터 변수를 선언하는 동일한 방법이다.


포인터 변수에는 주소를 넣어줘야 한다.


변수의 주소를 포인터 변수에 대입시켜주면된다.


& 연산자를 사용하여 변수의 주소를 대입시키면 된다.


int number = 123;

int * pointerNumber, * pointerNumber2;

pointerNumber = &number;


&number 에서 &는 변수 number의 메모리 주소를 가리키는 연산자이다.


& 연산자 : 해당 변수의 메모리 주소를 알아내기 위한 연산자. 포인터 변수에 값(주소)을 넘겨주기 위해 사용한다.


위의 예제를 통하여 pointerNumber 에는 변수 number가 확보한 메모리 주소가 담겨있다.


참고로 포인터 변수에 대입을 할 경우 직접 주소를 써넣는 것은 옳바르지 않다. 초기화 할경우, 0 이나 null 로 하는 것이 옳바르다. 여기서 null은 0을 의미한다.

0은 0번지를 의미하는 것은 아니고 아무곳도 가리키지 않는 다는 의미이다.

ex) 

pointerNumber = 123123123; // 이런 명령은 옳바르지 않다.

pointerNumber2 = pointerNumber // 포인터 변수를 포인터 변수에 대입하는 것은 가능하다.


pointerNumber 에는 메모리 주소가 담겨 있는데 이 메모리 주소를 가지고 number에 메모리(데이터)에 접근하여 값을 가져올 수도 있다.


printf("%d",*pointerNumber);


위의 명령에 의해서 출력되는 값은 123 이 될 것이다.


*pinterNumber는 number와 동일시 되는 것이다.


* 연산자 : 포인터 변수가 가리키는 메모리 주소의 메모리(데이터)를 가져오는 연산자.



& 연산자는 일반 변수에 사용하고 대입은 포인터 변수에 한다.

* 연산자는 포인터 변수에 사용하고 대입은 일반 변수에 한다.


포인터 변수를 선언할 때 * 를 사용하기 떄문에 연산자 * 를 사용할 때와 헷갈릴수 있으나 몇번 스스로 작성하면서 해보면 이해가 될것이다.