메모리의 주소를 저장하기 위한 변수를 포인터라 한다.
선언
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와 동일시 되는 것이다.
* 연산자 : 포인터 변수가 가리키는 메모리 주소의 메모리(데이터)를 가져오는 연산자.
& 연산자는 일반 변수에 사용하고 대입은 포인터 변수에 한다.
* 연산자는 포인터 변수에 사용하고 대입은 일반 변수에 한다.
포인터 변수를 선언할 때 * 를 사용하기 떄문에 연산자 * 를 사용할 때와 헷갈릴수 있으나 몇번 스스로 작성하면서 해보면 이해가 될것이다.