전문가를 위한 C 책을 보다가, 다음과 같은 함수를 만났다.
void* thread_body(void* arg){
printf("Hello from first thread!");
return NULL;
}
음... 이전에 void형 포인터를 공부한 적이 있었는데 까먹었다.. 이참에 확실히 정리해두고자 한다.
int a = 10;
int* b = &a;
이 코드를 말로 풀어 설명하면 "b는 a의 주소를 저장하는데, 그 주소에는 int형 데이터가 있다." 이다. 맞는 말이다.
int a=10;
void* b=&a;
이번엔 이 코드를 풀어 설명하면 "b는 a의 주소를 저장하는데, 그 주소에는 void형 데이터가 있다." 이다.
그런데... void는 값이 없음을 의미하는 심볼이 아니던가? 컴퓨터는 자료형을 모르기 때문에 아무것도 없는 것처럼 보는 것 이라고 한다.(출처)
이를 다시 표현하면 "b는 a의 주소를 저장하는데, 그 주소에는 알 수 없는 자료형의 데이터가 있다..." 가 된다.
void형 포인터를 사용하려면 원본 변수의 자료형으로 캐스팅을 해주면 된다.
printf("%d", *b); // ERROR!
printf("%d", *(int*)b); // works!
그렇다면 다시, 처음의 이 함수는
void* thread_body(void* arg){
printf("Hello from first thread!");
return NULL;
}
알 수 없는 자료형을 가리키는 포인터 arg를 받아 어찌어찌 처리한 후, 알 수 없는 자료형 포인터(여기선 NULL)을 반환한다는 뜻이다!
reference https://reakwon.tistory.com/19
'소프트웨어 > C' 카테고리의 다른 글
| [C] 매크로 함수 (0) | 2025.11.20 |
|---|---|
| [C언어] const 키워드 (0) | 2025.08.24 |
| [C] 헤더파일에 대하여 (0) | 2025.08.02 |
| [C] C언어의 extern 키워드 (0) | 2025.07.30 |
| [C] C의 파일시스템, fopen_s() (0) | 2025.07.24 |