Получить размер указателя в C - PullRequest
18 голосов
/ 18 марта 2012

Как получить размер указателя в C, используя sizeof? Я хочу распределить некоторую память для хранения указателя (а не значения, на которое указывает).

Ответы [ 3 ]

31 голосов
/ 18 марта 2012

Учитывая произвольный тип (я выбрал char здесь, но это ради конкретного примера):

char *p;

Вы можете использовать любое из следующих выражений:

sizeof(p)
sizeof(char *)

Приведение к вызову malloc(), например:

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

Последняя версия имеет некоторые преимущества: в случае изменения типа ppc выражение все равно выделяет правильный пробел.

12 голосов
/ 18 марта 2012

Это должно сработать:

sizeof(void*)
1 голос
/ 18 марта 2012
char *ptr;
char **ptr2 = malloc(sizeof(ptr));

должен быть в состоянии достичь вашей цели. Независимо от платформы, этот код должен работать.

...