포인터 변수란 메모리의 주소값을 가지고 있는 변수이다.
메모리의 단위는 바이트다. 1바이트는 8비트이다.
변수의 자료형의 크기에 따라서 할당되는 양이 다르다.
변수의 주소를 가져오는 연산자는 &이고, 주소안의 값을 참조하는 연산자는 *이다.
포인터의 선언은 자료형에 *을 붙여서 포인터 자료형임을 나타낸다.
예를 들어 char*, int*, double* 처럼 자료형을 나타낸다.
하지만 위의 모든 포인터 자료형들의 크기는 8byte이다. 그 이유는 모두 주소값을 나타내는 자료형이므로 주소를 담기 위해서는 8byte가 필요하기 때문이다. 하지만 운영체제 별로 64bit 운영체제이면 64bit 만큼의 주소가 표현이 가능하므로 8byte, 32bit os 이면 32bit 만큼 표현이 가능하므로 포인터의 크기가 4byte이다.
여기서 int*과 char*모두 8byte인데 왜 앞의 자료형을 써야 하는지 궁금할 수 있다.
그 이유는 메모리 안의 값을 해석할 때에 앞의 자료형 데로 해석하기 때문이다.
따라서 컴퓨터 메모리 상에는 같은 값이 있더라도 자료형에 따라서 다르게 해석 될 수 있다.
위의 코드에 (int*)은 포인터 타입의 형변환이다.
포인터를 사용시에 주의 할 점은 따라서 넣어주고 싶은 값의 자료형과 포인터 타입의 자료형을 맞춰주어야 한다.
또한 처음에 선언 할 때에 NULL 로 초기화 해 주어야한다. 초기화를 안 해준다면 엉뚱한 값이 들어가서 엉뚱한 곳을 참조 할 수 도 있시 때문이다.
또한 배열의 이름은 배열의 맨 처음 인덱스의 주소와 같다.