2012-03-18 2 views
16

에서 포인터의 크기를 가져 오기? 포인터를 저장하는 메모리를 malloc하고 싶습니다.내가 <code>sizeof</code>를 사용하여 C에서 포인터의 크기를 얻는 방법 C

+5

AFAIK는 서로 다른 유형의 포인터는 같은 크기가 보장되지 않습니다. – SLaks

+0

정말요? 예제/소스를 제공 할 수 있습니까? 저는 항상 모든 포인터가 같은 크기를 가지고 있다고 가정했습니다. 왜냐하면 모두 같은 주소 공간 내의 메모리 위치를 참조하기 때문입니다. – Matt

+4

@Matt : 사소한 반례는 함수 포인터입니다. 반드시 같은 주소 공간이 아니어야합니다. 참조 : http://stackoverflow.com/questions/916051/are-there-are-any-platforms-where-pointers-to-different-types-have-different-siz합니다. –

답변

27

임의의 유형을 감안할 때 (내가 여기 char을 선택했습니다,하지만 그 구체적인 예를 위해서입니다) :

char *p; 

당신이 중 하나를 사용할 수 있습니다

sizeof(p) 
sizeof(char *) 

malloc() 칼에 선도 : 이러한 식의 난 같은 : ppc 변경의 유형, 표현식이 아직 올바른 공간을 할당하는 경우

char **ppc = malloc(sizeof(char *)); 
char **ppc = malloc(sizeof(p)); 
char **ppc = malloc(sizeof(*ppc)); 

마지막 버전은 몇 가지 장점이 있습니다.

+4

첫 번째 표현식에서 괄호는 선택 사항입니다. –

+3

@CarlNorum 사실이지만 표현식이 꽤 명확해진 것을 알았습니다. 그것은 스타일의 문제이지 편집해야하는 것이 아닙니다. –

+2

+1은 마지막 버전이 선호됨을 나타냅니다. –

11

이 트릭을 수행해야합니다

sizeof(void*) 
1
char *ptr; 
char **ptr2 = malloc(sizeof(ptr)); 

은 귀하의 목적을 달성 할 수 있어야합니다. 플랫폼이 무엇이든 관계없이이 코드가 작동해야합니다.