Pregunta

Esta fue una entrevista de colocación laboral que enfrenté. Preguntaron si podemos realocear Array, les dije que sí. Luego preguntaron: entonces por qué necesitamos punteros, ya que la mayoría de las personas dan razones para perder espacio de memoria. No pude dar una respuesta satisfactoria. Si cualquier organismo puede dar una respuesta satisfactoria, estaré agradecido. Mencione cualquier situación en la que la declaración anterior pueda contradecir.

Gracias.

¿Fue útil?

Solución

Solo puede reasignar una matriz que fue asignada dinámicamente. Si se asignó de forma estática, no se puede reasignar [de forma segura]. *

Los punteros mantienen las direcciones de los datos en la memoria. Se pueden asignar, desasignar y reasignar dinámicamente utilizando los nuevos operadores / eliminar en C ++ y malloc / free en C.

Le sugeriría encarecidamente que lea El lenguaje de programación en C por Kernighan y Ritchie y un texto sólido en C ++ como C ++ desde el suelo Arriba por Herbert Schildt.

El uso de la memoria dinámica, los punteros, las compensaciones, etc. son fundamentales para usar estos dos idiomas. No saber cómo funcionan y por qué existen es una razón probable para que los posibles empleadores lo rechacen.

* el compilador no debería permitirle reasignar todo lo que se ha asignado de forma estática, pero si lo hace, el comportamiento no está definido

Otros consejos

El fraseo es un poco extraño, pero a mi me parece que la pregunta de la entrevista fue una pregunta abierta diseñada para que expliques lo que sabes sobre arrays, punteros, asignación de memoria dinámica, etc. Si yo fui el entrevistador Querría que el candidato articule las diferencias entre int * a = malloc (10 * sizeof (int)); y int a [10]; . La pregunta de seguimiento no está muy bien redactada, pero probablemente fue un intento de empujar al candidato en la dirección de la diferencia entre un puntero y una matriz y poner en marcha el pensamiento.

OK. No puedes reasignar una matriz que ha sido declarada estáticamente. El propósito de usar punteros (en lugar de una matriz declarada estáticamente), sería para que pueda reasignar el espacio. Supongo que, para ser técnicamente correcto, podría reasignar una matriz definida estáticamente pasándole un puntero, pero no querría. El comportamiento no está definido si el puntero está en la memoria que no fue asignada por malloc.

Realmente no entiendo cómo usar los punteros " desperdicia memoria " ;. La función realloc: -

void *realloc(void *ptr, size_t size);

lleva un puntero a la memoria para cambiar el tamaño como parámetro. Además, hay muchos más usos para los punteros que la memoria dinámica, pasando por referencia, por ejemplo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top