2013-02-03 3 views
0

void 포인터가 전달되는 함수가 있습니다. 이 포인터는 int, char 또는 float가 될 수 있습니다. 나는 연관된 데이터를 통해 어떤 데이터 유형이 나에게 전달 될지 안다. 예를 들어, 아래처럼 내 함수가 모습입니다 :char 포인터, int 및 float의 끝 찾기

void * (int type, void * data); 

내가 전달하고 무효 포인터가 원래 문자 유형 인 경우, 나는이 문자 형식으로 다시 캐스팅, 얼마나 많은 바이트를 결정하는 방법이있다 해당 포인터와 관련이 있습니까? 내 함수가 호출 될 경우 예를 들어, 다음과 같이

f(1, (void *)"Hello world"); 

와 나는 문자 포인터

char * p = (char *)data; 

사용 얼마나 많은 바이트 내가 알아낼 수있는 방법이 있나요 다시 무효 포인터를 캐스팅? null 문자를 검색하고 원래 포인터에서 몇 바이트 떨어져 있는지 계산해야합니까? int와 float의 크기를 알아 내기 위해 무엇을해야합니까?

+0

3r 인수가 필요하거나 int와 float에 대한 terminatror 값을 문서화하십시오. – qPCR4vir

답변

2

null 문자를 검색하여 원래의 포인터에서 얼마나 많은 바이트가 얼마나 떨어져 있는지 계산할 수 있습니까?

예, 이 실제로 char* 인 경우 작동합니다.

int 및 float의 크기를 찾으려면 어떻게해야합니까?

intfloat 항상 같은 크기 (그것은 일반적으로, 아키텍처에서 32 또는 64 비트를 따라 다릅니다. 정확한 크기를 결정하기 위해 sizeof 연산자를 사용합니다). void*으로 int 배열을 전달하는 경우 길이를 찾을 방법이 없습니다.

일반적으로이 경우 크기를 함수에 전달하는 것이 좋습니다.

+0

아, int와 float의 크기가 일정하다는 사실을 완전히 무시했습니다. 크기를 보낼 수 있다면 내가 지금하고있는 일을하는 것을 선호한다. 하아. 감사. – kubiej21

+0

"int와 float는 항상 같은 크기로"NOT !!!! int는 16 비트가 될 수 있고, 32보다 적을 수 있습니다 (모든 인텔 16 시스템) –