¿Cómo obtengo el tamaño de un puntero en C usando sizeof
? Quiero malloc algo de memoria para almacenar un puntero (no el valor que se apunta).Obtener el tamaño del puntero en C
Respuesta
Dado un tipo arbitrario (que he elegido char
aquí, pero eso es por el bien de ejemplo concreto):
char *p;
Puede utilizar cualquiera de estas expresiones:
sizeof(p)
sizeof(char *)
que conduce a una cal malloc()
l tales como:
char **ppc = malloc(sizeof(char *));
char **ppc = malloc(sizeof(p));
char **ppc = malloc(sizeof(*ppc));
La última versión tiene algunos beneficios en que si el tipo de ppc
cambios, la expresión todavía asigna el espacio correcto.
Paréntesis opcional en la primera expresión. –
@CarlNorum Es cierto, pero creo que aclaran bastante la expresión. Esa es una cuestión de estilo, y no algo que deba ser editado. –
+1 para identificar que se prefiere la última versión. –
Esto debería hacer el truco:
sizeof(void*)
char *ptr;
char **ptr2 = malloc(sizeof(ptr));
debería ser capaz de lograr su objetivo. No importa cuál sea la plataforma, este código debería funcionar.
- 1. Cómo obtener el tamaño del cursor en C#
- 2. ¿Cómo obtener el tamaño del terminal en c para Windows?
- 3. ¿Cuál es el tamaño del puntero en una computadora de 64 bits en C++?
- 4. ¿Por qué sizeof (param_array) es el tamaño del puntero?
- 5. size_t es el tamaño del puntero en la práctica
- 6. Obtener el tamaño del monitor en python
- 7. C++ puntero del alcance
- 8. Obtener el tamaño del sistema RAM
- 9. Puntero C++ de tamaño de bit específico
- 10. obtener el puntero de función 'ldftn' en C#
- 11. cómo calcular el tamaño de la memoria apuntada del puntero?
- 12. ¿Cómo obtener la longitud de la matriz del puntero C?
- 13. Obtener el tamaño del archivo en el disco
- 14. Convertir del puntero C++/CLI al puntero nativo de C++
- 15. Cómo obtener el tamaño del archivo HttpPostedFileBase
- 16. C pregunta del puntero colgante
- 17. Inicialización del puntero de secuencia en C#
- 18. puntero del ISA en Objective-C
- 19. el operador "nuevo" en C++, pregunta del puntero
- 20. Tamaño del carácter ('a') en C/C++
- 21. Obtener tamaño de struct en C#
- 22. C++ Pase el puntero a la función (Cómo) + Manipulación del puntero C++
- 23. C++: La inicialización del puntero a puntero a int
- 24. ¿Es seguro asumir que un puntero es del tamaño de un int en C?
- 25. Determinar el tamaño del código C#
- 26. (nil) puntero en C/C++
- 27. ¿Cómo obtener el tamaño de la memoria del sistema disponible?
- 28. C y el puntero notación
- 29. Obtener el tamaño de bloque del sistema en Java
- 30. obtener el tamaño del texto svg en python
AFAIK, no se garantiza que el puntero a diferentes tipos tenga el mismo tamaño. – SLaks
¿De verdad? ¿Puedes proporcionar un ejemplo/fuente? Siempre he supuesto que todos los punteros tienen el mismo tamaño porque todos se refieren a ubicaciones de memoria dentro del mismo espacio de direcciones. – Matt
@Matt: Un contraejemplo trivial es un puntero de función; ese no es necesariamente el mismo espacio de direcciones. Ver también: http://stackoverflow.com/questions/916051/are-there-are-any-platforms-where-pointers-to-different-types-have-different-siz. –