2013-02-18 4 views
15

C로 편안하게 시작한 다음 유형 캐스팅을 실행했습니다. I는 *가 .H 파일구조체에 void 포인터를 캐스팅

struct data { 
    int value; 
    char *label; 
}; 

에 정의 다음 경우 내가 사용할 수 있도록 내가 구조체에 무효 포인터를 캐스팅 어떻게 다른 * .H 파일

# define TYPE  void* 

이 변수 "TYPE val"이 함수로 전달됩니까? 예를 들어 TYPE val이 가리키는 값을 활용하려는 경우 다른 값으로 전달할 수 있도록 어떻게 캐스팅해야합니까?

+0

'#define TYPE void *'은 좋지 않은 아이디어입니다. 적어도 typedef이어야합니다. 다음 선언문에서 일어날 일을 고려해보십시오 :'TYPE x, y;'또는'const TYPE x;'. – jamesdlin

+1

또한'void *'포인터와 C를 다루는 경우 명시 적 변환을 수행 할 필요가 없습니다. C는'void *'포인터를 * 암시 적으로 * 캐스트 할 수 있습니다 : void * p = ...; 구조체 데이터 * val = p;'. – jamesdlin

+0

@jamesdlin 나는 그것이 나쁜 생각에 동의한다. 그러나 그것은 나의 생각이 아니다. 그래서 나는 그것과 함께 가야한다. 그래서 'TYPE val'이 void 포인터로 함수에 전달 될 때 단순히 struct data * temp = val;을 선언 한 다음 temp를 함수에 전달하면 temp-> 값? – user1852050

답변

19
(struct data*)pointer 

struct data에 대한 포인터를 무효화 할 수있는 포인터를 캐스팅합니다. 구조체에

+0

어쩌면 내가 죽음에 이길거야,하지만 위의 예제에서 이것은 포인터를 가리키는 값을 얻을 수 있도록 구조체 포인터에 TYPE val을 캐스팅하는 것을 의미합니다, 나는 이것을 할 것이다 : (struct data *) 발? 이것이 정확히 무엇입니까? 그리고 내가 앞뒤로 가서 변수 'int num = (struct * data) val'을 선언하면 val 값이 가리키는 메모리 주소 또는 val 값이 가리키는 메모리 주소를 얻게됩니까? 후자의 경우 'val'값을 얻기 위해 어떻게 캐스팅해야합니까? 인내심에 감사드립니다. – user1852050

+0

@ user1852050 당신은 구조체 변수와 포인터 - 구조체 변수를 혼동하고 있습니다. 구조체에 대한 포인터를 얻으려면'&'연산자를 사용할 수 있습니다. – wRAR

+0

그래서 임시 구조체에 메모리를 선언하고 할당 한 다음 & val 값을 부여 할 수 있습니까? temp = & val과 같습니다. 그리고 temp-> value를 사용하여 값을 얻으시겠습니까? – user1852050

-1

타입 캐스팅 무효 포인터가 우리가 를 구조체에 형태 캐스트 할 수 있습니다 이것에 대한

void *vptr; 
typedef struct data 
{ 
    /* members */ 
}tdata; 

다음에 수행 될 수 있습니다 u는 일부 기능에

다음

을 구조 변수로이 vptr에서를 보낼 말할 수
void function (tdata *); 
main() 
{ 
    /* here is your function which needs structure pointer 
     type casting void pointer to struct */ 

    function((tdata *) vptr); 
} 

참고 : void 포인터의 주 목적 인 모든 유형의 포인터를 유형 변환 할 수 있습니다.

관련 문제