void형 변수란게 뭐죠..?

익명 사용자의 이미지

C 프로그래밍 공부를 하고있는데 궁금한점이 있어서 질문합니다.

함수에서 void형 함수는 어떤의미인지 알겠는데..

변수 선언에서 void형으로 선언한다는 것이 어떤 의미인지 잘 모르겠습니
다.

소스를 보니

typedef void *HASHTABLE;

이렇게 해놓고..

변수 선언을 할때

HASHTABLE cmd__line;

이런식으로 선언하는데 그럼 cmd__line이라는 변수는 void형 포인터 변수
라고 생각됩니다.

근데 void형 변수가 어떤 의미인지 모르겠습니다.

어떤 자료형이 저장되는 것이지요...?

익명 사용자의 이미지

책 찾아보면 대번에 나오는 건뎅.

ㄹㄹ의 이미지

이런 답변은 왜 다는걸까..

익명 사용자의 이미지

void *

범용포인터(Generic Pointer)로 사용됩니다.

즉, 어떤포인터이든 받아 들일 수 있죠.

예를들어

int memset(void *p, int c, size_t size);
를 본다면

p에는 어떠한 포인터형도 들어갈 수 있게 됩니다.

하지만 다음 예를 보면

void func(void *p)
{
p->close();
}

class MyFileHandler { ... };

MyFileHandler f;
func(&f);

로 했다면 에러가 납니다.

즉 func에서 받은 p는 범용이므로 사용전에 항상 적절한 캐스팅이 필요하죠

그렇다면 func를 다음과 같이 고칠 수 있습니다.

void func(void *p)
{
((MyFileHandler *)p)->close();
}

참고로 void * 형은 동적인 argument전달에 주로 사용이 됩니다.

익명 사용자의 이미지

답변 감사합니다...

너무 쉽게 이해가 되게 설명해 주셔서 감사합니다..

그리고 ㄷ죠45ㅛ님 책찾아보면 나온다고 했는데...

어떤책을 보면 잘 나와 있을까요..?

제가 가지고 있는책에는 없어서리.. 책이 별로 않좋은거 같아요...

검색해봐도 그 설명이 별로 없더라고요...

암튼 궁금했었는데 확 뚫린 느낌입니다.