int* 는 포인터 변수인데 그 가르키는 주소의 type이 int, char* 는 포인터 변수인데 가르키는 주소의 type이 char
그렇다면 void* 는 가르키는 주소의 type이 void 라는 말인데.. void 라는 애매모호한 type이 도대체 뭘까?
void*
void*는 바로 범용적 포인터 즉 일단 가르키고 본다. 어떤 포인터라도 대입이 가능하다 이말이다.
매개 변수로 void*를 사용하면 모든 포인터를 일단 받고 보겠다 이말이다.
하지만 역참조나 포인터 산술 연산을 할 때는 반드시 다른 포인터로 캐스팅해서 써야한다
void* var로 받고 나중에 역참조할때는 *(int* var) 이런식으로 해줘야한다!
1. void* p에 float 포인터를 담았다. printf로 값을 출력할 때는 반드시 float 포인터로 캐스팅 해줘야한다.
2. 함수 add의 op1, op2는 void*로 일단 담았다. 역참조 할떄는 반드시 *(int*)op1, *(int*)op2 처럼 캐스팅 해줘야한다.
이렇게 캐스팅해주지 않으면 컴퓨터 입장에서 몇 바이트 만큼 읽으라는지 알 수가 없다!!
포큐아카데미 C언어 복습
'C' 카테고리의 다른 글
C언어 빌드과정(컴파일) (0) | 2020.02.25 |
---|---|
C언어 배열 삽입, 삭제 (2) | 2020.01.03 |
C 언어 변수에 함수 할당 (0) | 2019.12.20 |
C언어 얕은복사 vs 깊은복사 (0) | 2019.12.18 |
C언어 구조체 (0) | 2019.12.18 |