컴퓨터 프로그램이나 정보처리에서 어떤 데이터가 아니라 데이터가 저장되어 있는 기억 장소의 위치 또는 주소를 나타내는 변수이다.
//포인터(*변수)를 써서 변수 x의 주소값을 확인하는 예문
#include <stdio.h>
int main()
{
int x;
unsigned char *cp;
x = 0x12345678;
cp = (unsigned char *)&x; //cp = &x;만 입력하면 에러메시지는 출력되지 않지만 경고메시지가 뜬다.(unsigned char *)을 캐스팅하는 이유는 동등 형이 아닌 int와 char를 동등형으로 잡아주기 위해 쓰였다.
캐스팅을 안하고 컴파일 해도 출력은 같다.
printf("%X\n",x);
*cp = 0xAA;
printf("%X\n",x);
++cp;
*cp = 0xBB;
printf("%X\n",x);
++cp;
*cp = 0xCC;
printf("%X\n",x);
++cp;
*cp = 0xDD;
printf("%X\n",x);
return 0;
}
결과
12345678
123456AA
1234BBAA
12CCBBAA
DDCCBBAA
위처럼 거꾸로 출력이 되는 이유는 우리가 보통 사용하는 컴퓨터가 인텔계열의 컴퓨터이기 때문이다.
인텐 계열의 컴퓨터는 메모리에 값을 저장할 때, 낮은 번지의 메모리부터 값을 뒤에서 저장하는 방식을 따른다. 이를 리틀엔디언(little Endian)이라 한다.
* 포인터는 4바이트이다. 이유는 주소를 저장하기 때문이다. 포인터 크기는 버스크기로 좌우한다.