2012-02-25 4 views
3

을 인수로 사용하는 함수에 other_type *ptr을 전달하면 vptr은 자동으로 other_type *으로 변환됩니까? 코드는 다음과 같습니다.다른 포인터에 대한 'void *`

typedef struct A { 
    //... 
}A; 

void bar(A *a) 
{ 
    //do something with a 
} 

int main() 
{ 
    A a = {..}; 
    void *vp = &a; 
    bar(vp); //will vp be converted to A*? 
} 

내 코드가 안전한지, 정확합니까?

+0

어떤 결과가 있습니까? 오류, 경고? –

+0

@ Thecrocodilehunter, 아니요. – Alcott

답변

5

예, void*은 암시 적으로 모든 포인터 유형으로 변환 가능하며 모든 포인터 유형은 암시 적으로 void*으로 변환됩니다. 이 때문에 예를 들어 malloc의 반환 값을 캐스팅 할 필요가 없습니다.

+0

그래서 내 코드가 옳습니까? 나는 other_type에'(void *)'와 같은 것을 할 필요가 없으며'void *'에'(other_type *)'을해야만한다는 것을 의미한다. – Alcott

+0

@Alcott이 정확하고 코드가 안전하고 정확합니다. C에서 캐스트를 사용하지 않고 모든 유형과'void * '사이에서 앞뒤로 변환 할 수 있습니다 (C++에서는 변환 할 수 없음). –

+0

@Alcott C++ 디자이너는 이것을 허용하지 않기로 결정했기 때문에 C++에서 다른 포인터 유형에'void * '를 명시 적으로 사용해야합니다. –

3

코드가 작동합니다. 구조체 A *를 기대하는 무언가에 void *를 전달할 수 있습니다. 이 점에있어서 C는 약하게 입력 된 것입니다.

관련 문제