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.
- 1. dimensione della matrice e la dimensione del puntatore carattere carattere
- 2. Ottieni la dimensione del sistema RAM
- 3. Puntatore C++ di dimensione bit specifica
- 4. Ottieni nome file dal puntatore del file
- 5. Ottieni la dimensione della finestra del terminale (righe/colonne)
- 6. Perché sizeof (param_array) è la dimensione del puntatore?
- 7. Perché la sottrazione del puntatore in C produce un intero?
- 8. Ottieni la posizione del cursore rispetto al controllo - C#
- 9. Dichiarazione ricorsiva del puntatore funzione in C
- 10. Emacs: ottieni new-frame ed emacsclient -c per utilizzare la dimensione del fotogramma impostata?
- 11. Specificare la dimensione del tipo enum in C
- 12. Come ottenere la dimensione del cursore in C#
- 13. Come si ottiene la dimensione del file in C#?
- 14. C - Come cambiare la dimensione del carattere in Ncurses?
- 15. Ottieni puntatore per la prima voce in un array
- 16. Ottieni la dimensione della richiesta POST in PHP
- 17. La dimensione del carattere * è uguale alla dimensione di int *?
- 18. Ottieni la dimensione dei dati non compressi in zlib?
- 19. Dimensione massima pila C/C++ del programma
- 20. Ottieni la dimensione totale di un disco rigido in C++ windows
- 21. Ottieni la dimensione dello stack corrente in FORTH
- 22. Ottieni la dimensione in byte dell'elenco <T>
- 23. Qual è la dimensione del vuoto?
- 24. ottiene la posizione del puntatore del terminale
- 25. C++: errore di corruzione del puntatore strano
- 26. Puntatore C/C++ Domanda
- 27. Come posso cambiare la dimensione di un array in C?
- 28. Ottieni la lingua corrente in C#
- 29. Ottieni la directory home in Linux, C++
- 30. imposta la dimensione del carattere in jquery
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. –