: 객체(변수) 또는 함수를 가르키는것
사용방법
int *p;
int n;
p = &n; //n의 주소를 p에 대입
*p = 999; //p가 가르키는 곳에 999를 대입
배열의 이름은 그 배열의 첫번째 요소에 대한 포인터.
따라서 위의 예제에서 3번째줄은 p=&n[0]과 같음
포인터p가 배열의 요소 n을 가르킬 때
*(p+i) = n[i]
이처럼 포인터가 배열의 첫번째 요소를 가르키는경우 배열처럼 사용가능.
공백 포인터는 객체 포인터, 함수 포인터와는 다른 또다른 포인터이다. 정수 값 0은 모든 포인터형으로 형 변환이 가능하고 그 결과는 NULL 포인터이다. 공백 포인터를 나타내는것이 공백 포인터 상수라고 부르는 매크로 NULL 이다. NULL의 정의는 값 0을 갖는 모든 정수, 상수 또는 상수식을 void* 으로 형 변환한 식이다.
defind NULL 0
defind NULL(void *)0
void 포인터는 모든 형의 객체를 가르킬 수 있다. 반대로 모든 자료형의 포인터 값을 void 포인터에 대입할 수 있다.
int a=10;
char b='b';
void *v_p;
int *i_p=&a;
char *c_p=&b;
//에러가 발생하지 않음
v_p = i_p;
v_p = c_p;
//반대도 마찬가지
i_p = v_p;
c_p = v_p;
단, void 포인터는 자료형이 정해져 있지 않기때문에 역참조가 불가능하다.
int a=10;
void *p=&a;
printf("%d",*p);
<error!!>
(이중 포인터 예시)
int a=10;
int *p1;
int **p2;
p1=&a;
p2=&p1;
위와 같은 방법으로 삼중, 사중 등등 다중 포인터 사용 가능
(포인터에 주솟값 직접 주기)
int *numPtr = 0x00FFCBA;
단, 실제로 존재하는 주솟값에 한해서 가능.