Come si ottiene la dimensione di un puntatore in C utilizzando sizeof
? Voglio malloc un pò di memoria per memorizzare un puntatore (non il valore puntato).Ottieni la dimensione del puntatore in C
risposta
Dato un tipo arbitrario (ho scelto char
qui, ma che è per fare un esempio concreto):
char *p;
È possibile utilizzare uno di queste espressioni:
sizeof(p)
sizeof(char *)
portando ad una malloc()
cal l quali:
char **ppc = malloc(sizeof(char *));
char **ppc = malloc(sizeof(p));
char **ppc = malloc(sizeof(*ppc));
L'ultima versione ha alcuni vantaggi in quanto se il tipo di ppc
modifiche, l'espressione alloca ancora spazio corretto.
Parentesi opzionali nella prima espressione. –
@CarlNorum Vero, ma trovo che chiariscano un po 'l'espressione. È una questione di stile e non qualcosa che dovrebbe essere modificato. –
+1 per identificare che è preferibile l'ultima versione. –
Questo dovrebbe fare il trucco:
sizeof(void*)
char *ptr;
char **ptr2 = malloc(sizeof(ptr));
dovrebbe essere in grado di raggiungere il vostro scopo. Non importa quale sia la piattaforma, questo codice dovrebbe funzionare.
AFAIK, puntatori a tipi diversi non sono garantiti per avere la stessa dimensione. – SLaks
Davvero? Puoi fornire un esempio/fonte? Ho sempre pensato che tutti i puntatori abbiano le stesse dimensioni perché si riferiscono tutti a posizioni di memoria all'interno dello stesso spazio di indirizzi. – Matt
@Matt: un controesempio banale è un puntatore a funzione; non è necessariamente lo stesso spazio degli indirizzi. Vedi anche: http://stackoverflow.com/questions/916051/are-there-are-any-platforms-where-pointers-to-different-types-have-different-siz. –