포인터에 대한 짧은 공부

포인터는 기본적으로 특정 자료형을 통해 메모리 주소에 접근하기 위해 사용해야 하므로
int 변수에는 int 포인터, char 변수에는 char 포인터를 사용할 수 있으나
특정 자료형을 지정하지 않고 메모리 주소만 저장할 수 있는 void형 포인터도 있다.

생각해보면 함수도 void형 함수가 있는데 그거는 아무런 인자를 받을 수가 없어서
C언어에서 main함수를 만들 때 VS에서는 void형으로 자동 생성되는 거겠지

연산자의 우선 순위는 포인터 연산자가 더 낮으니 포인터 배열을 선언시 주의해야 한다.
ex) int a[10]; int (*pa)[10] = &a; 일 때 a[3]을 쳐서 접근하는거하고 (*pa)[3]으로 접근하던
똑같으나 *pa[3]으로 접근할 경우 a[3][0]으로 접근하는거나 마찬가지다.(오버플로우 발생)
이거는 *연산자의 우선순위 문제인데 이거는 연산자의 우선순위에 대해 다시 알아보자꾸나.

int *c[10]; // int *[10]의 자료형 c는 80바이트의 크기를 가진다. 배열 10개가 선언된 포인터배열
int *(*pc)[10] = &c // int *c의 주소를 저장한 포인터로 포인터배열의 포인터가 된다. 그래서 8byte
행여나 배열포인터하고 햇갈린다면 배열을 가리킬 수 있는 포인터가 배열포인터라는걸 기억하자
즉 int x[10]; int *(xp) = &x; 일 경우 int *(xp)가 배열포인터가 된다.

포인터만 해도 이렇게 아스트랄한데 객체지향으로 넘어가면 머리가 더 호롤롤롤롤 되겠지?

관련 글

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.