***** 포인터
1 포인터는 메모리의 주소값을 저장하기 위한 4바이트 변수(포인터의 크기가 4바이트인 이유는 32비트 컴퓨터의 주소체계가 32비트(4바이트)이기 때문)이다.
2 포인터 변수도 메모리에 할당된다.
3 & 주소연산자로서 변수의 주소지를 알아낸다.
4 * 메모리에 들어있는 값을 알아낸다.
앞서 scanf("%i" , &num);
의 경우 scanf뒤에 있는 &num은 num이라는 변수의 주소지를 담는 포인터를 선언한 것이며
그 주소지를 참조하여 값을 간접적으로 저장한 것이다.
(일반 변수에 주소지만 저장하면 4바이트 참조 경로가 아닌 정말 주소지의 값만 저장되므로 나중에 참조 할 수 없다.)
변수 i에 담긴 5는 4바이트에 걸쳐 이루어진 값이다.
포인터 pi에 담긴 값은 i의 주소지의 시작값이고 그로부터 4바이트를
참조하여 i의 값을 알아낼 수 있다.
int i = 5;
int * pi = &i;
NSLog(@"%d %d", i, &i);
//5 -1073744472
/*
5 : i의 값
-1073744472 : i의 주소지
*/
NSLog(@"%d %d %d", pi, &pi, *pi);
//-1073744472 -1073744476 5
/*
-1073744472 : i의 주소지를 담고있는 pi의 값
-1073744476 : pi의 주소지
5 : pi의 담긴 주소지를 통해 들어간 i의 값
*/