포인터는 포인터를 가리키는 포인터가 있다.
즉 변수 <- 포인터 <- 포인터의 포인터 의 구조가 있다는 말이다. 물론 이렇게 쭉 이어지는 것은 아니다.
포인터 변수도 하나의 기억공간으로 봐서 이 포인터를 구할 수 있다. 이를 이중 포인터라고 한다. 다행히 삼중 사중은 없다.
이중포인터의 표기는
**pp 이렇게 *를 두개 붙인다. 직관 끝판왕.
그래서 값을 abc 라고 두면
*p = abc
*pp = p
**pp = abc
&abc = p
&p = pp
이러한 식을 도출해낼 수 있다.
void 포인터
int형 변수의 포인터를 void 포인터로 형변환을 시킬 수 있다.
무슨 말이냐?
void *vp;
라고 지정해두면 vp가 가르키는 변수는 아직 정해지지 않았지만 일단 포인터를 만들었다는 뜻이다.
이는 추후에 지정하기 위함이다. 예를 들어 vp = &num 요로케!
자료형과 상관 없이 포인터를 붙일 수 있다는 장점이 있다.
그러나 반대로 void 포인터가 가리키는 곳의 값을 사용하려면 다시 형변환을 해야한다.
말인 즉슨,
int main(void) {
int num = 1182;
void *p
p = &num
printf("%d", *p);
return 0;
}
이런 식으로 컴파일을 하게 되면 오류가 생긴다. *p의 자료형이 없어서 얼만큼의 Byte를 읽어와야하는지 모르기 때문이다!멍청
따라서 우리는 수고스럽게 다음과 같이 만들어줘야한다.
int main(void) {
int num = 1182;
void *p
p = &num
printf("%d", *(int*)p);
return 0;
}
이렇게 해야 p포인터가 가르키는 변수가 int라는 것을 알고 불러오게 된다.
오늘은 여기까지! 이제 포인터를 끝내고 다음 단계로 넘어가본다!!
'Data Structure [C] > 문돌이도 할 수 있는 [C언어 자료구조]' 카테고리의 다른 글
#13 [C 자료구조] 배열과 포인터의 혼종 (0) | 2019.04.19 |
---|---|
#12 [C 자료구조] 2차원 배열: 행렬이 된 배열 (0) | 2019.04.19 |
#10 [C 자료구조] 포인터가 뭐죠?: 자료의 저장 방법 (0) | 2019.04.19 |
#9 [C 자료구조] 알고리즘의 기초 of 기초: 순환 예시 (0) | 2019.04.19 |
#8 [C 자료구조] 알고리즘의 기초 of 기초: 순환(Recursion) (0) | 2019.04.19 |