2012-12-25 2 views
1

포인터를 변수에 전달하려고합니다. 때로는 정수이고 때로는 문자 일 수도 있습니다. 예에서 나는 CreateObject 포인터 p을 통과하지만 난 변수의 값을 검색하려고 할 때 포인터 포인트는 어색한 결과를 얻을 아래 :c - void * 매개 변수를 사용하여 함수에 대한 포인터 전달

int i =0; 
int *p = malloc(sizeof(int)); 
*p = i; 

ObjectP object = CreateObject(p); 

내가 int로 다시 캐스팅 할 말과 를 표시 : 160637064 0 대신 내가 대신 내가 이전에 할당 된 정수에 대해 어떻게 얻고 어떻게 내가 현재 값 대신를 검색 할 :

void CreateObject(void *key) 
{ 
    printf("%d\n", (int)key); 
} 

을 나는거야?

+1

을 그리고, 당신은 어떻게 요소의 크기 통과를 구별 할 계획입니까? 또 다른 매개 변수? – sidyll

답변

6

이는 :

(int) key 

는 정수로 자리는, 그것이 재 해석있어 포인터의 값 (어드레스)를 가리키는 데이터에 액세스하는 포인터를 역 참조되지 않는다.

당신이 필요합니다 : 당신은 정수에 대한 포인터를 타입 캐스팅하고

printf("%d\n", *(int *) key); 
3

. 이것은 당신이 단순히 주소를 얻는다는 것을 의미합니다. 결국 포인터는 단지 주소 일뿐입니다.

아마도 포인터를 캐스팅하는 대신 역 참조하고 싶을 것입니다. *(int*)key 그렇게 할 것입니다.

3

포인터를 인쇄 중입니다. 주소가 아니라 가리키는 값.

사용이 값 인쇄 : 호기심,

void CreateObject(void *key) 
{ 
    printf("%d\n", *(int*)key); 
} 
관련 문제