Dependiendo de a quién le pregunte , los punteros son una bendición o una maldición. Punteros proporcionan un mecanismo para acceder y modificar directamente objetos y el código en la memoria . Los punteros se utilizan en muchos lenguajes de programación para la manipulación de cadenas de caracteres , pasar parámetros a funciones , el manejo de conjuntos de datos y la creación de listas enlazadas y otras estructuras de datos complejas . Mientras que los punteros le proporcionan una gran flexibilidad para la gestión de la memoria y la optimización de algoritmos , hay desventajas . Aprender a utilizar punteros es difícil para muchos programadores y depurar problemas puntero es un reto. Optimización
Punteros proporcionan una ventaja de rendimiento que le permite acceder a la memoria del ordenador directamente . En un programa de ordenador , la forma más rápida de acceder y modificar un objeto para acceder directamente a la memoria física donde se almacena ese objeto. Esta técnica se utiliza habitualmente para optimizar los algoritmos que requieren acceso frecuente o repetitiva a grandes cantidades de datos.
Seguridad
acceso directo a la memoria significa que usted puede hacer cosas que tal vez no debería. Dependiendo del lenguaje, el compilador y la plataforma informática , podría querer ( o intencionalmente ) de memoria de acceso que no es tuyo acceder. Como resultado , usted podría sobrescribir memoria crítica , modificar el código de una aplicación en ejecución , o hacer que la aplicación o en otra aplicación de comportarse o cerrarse inesperadamente . Un error común es ejecutar más allá del final de una matriz , el acceso a la memoria más allá del final del espacio asignado a la matriz.
Memoria de Gestión
Administrar el uso de memoria en una aplicación que utiliza punteros ofrece flexibilidad, pero también es una tarea. Asignar y desasignar memoria según sea necesario durante el tiempo de ejecución le permite crear objetos de gran tamaño , tales como matrices , rápidamente y de inmediato liberar la memoria cuando ya no es necesario . Sin embargo , también es fácil de crear pérdidas de memoria mediante la reasignación de un puntero sin liberar la memoria que estaba apuntando a la primera . La recolección de basura es su responsabilidad.
Función Parámetros
funciones pueden devolver un solo valor , pero puede tomar varios parámetros. Con la aprobación de punteros a variables como parámetros , la función se puede utilizar para establecer los valores de las variables y los nuevos valores se mantendrá después de la función regrese . Ser capaz de establecer el valor de varias variables a la vez con una sola llamada de función es limpio y eficiente. Sin embargo, puede ser un poco confuso para leer porque no se puede decir si las variables pasan en la voluntad de ser modificado o no , simplemente observando la llamada a la función . Usted tendrá que mirar la documentación de la función de aprender cómo se comporta la función
Función Punteros
punteros no son sólo para los objetos en la memoria ; . También se pueden utilizar para las funciones , permitiendo de este modo una función que se pasa como un parámetro a otra función . Un puntero de función se puede asignar la dirección de uno de una selección de funciones, de modo que el puntero actúa como una especie de alias . Orientada a objetos lenguajes de programación han eliminado la necesidad de punteros de función con la herencia y polimorfismo.
Pointer Confusión
punteros son un tema confuso para muchos programadores , sobre todo los experimentados en utilizando lenguajes que no cuentan con los punteros y el acceso directo a memoria . Sin embargo , la persistencia lleva rápidamente a la maestría de los punteros . Los punteros son acompañados a menudo por la sintaxis oscuro. Convenciones de denominación de variables constantes pueden ayudar a su código sea más legible. Por ejemplo , las convenciones de nombres comunes incluyen el uso de " p_ " o " ptr_ " como prefijo para los nombres de variables de puntero.
Consejos
Siempre use las funciones de asignación previstos por el idioma para asignación de memoria , y comprobar para asegurarse de que la memoria se asignaba antes de usarlo. Tenga cuidado con la administración de memoria y liberar memoria cuando ya no se necesita . Si reasigna un puntero a una nueva dirección de memoria , asegúrese de que la memoria antigua se libera o cedido a un puntero distinto. Asegúrese de que los punteros creados en funciones se les asigna la propiedad al alcance padre o que la memoria se cancela antes de salir de la función.