Los punteros apuntan a la estructuración de datos como los gotos al control de flujo.
Puede usar las instrucciones goto para crear esencialmente cualquier control de flujo posible: un bucle do, mientras que un bucle, para un bucle, una declaración de cambio / caso, condiciones en cascada o cualquier otra cosa que pueda imaginar.
Esto significa que una declaración goto es extremadamente versátil; de hecho, es demasiado versátil; El hecho de que se pueda usar un tipo de declaración para crear cualquier posible control de flujo significa que leer la declaración no le dice exactamente nada sobre el tipo de control de flujo que el escritor pretendía crear.
- ¿Es mejor para alguien que está aprendiendo programación enfocarse en algoritmos o en aspectos más prácticos de la ingeniería de software?
- En un intento de eliminar gradualmente una pila MS existente, ¿qué presenta una oportunidad más atractiva para un desarrollador de capas de presentación? ¿Puro jQuery + JSON + REST o adoptando alguna tecnología del lado del servidor que no sea MS específicamente para la capa de presentación?
- ¿MIT es bueno para futuros desarrolladores de software, específicamente front-end?
- ¿Qué tan difícil es programar el software de procesamiento de texto?
- ¿Cuáles son las formas de permitir que los miembros del equipo UX produzcan entradas para los desarrolladores 1-2 sprints adelante en un equipo de desarrollo ágil multifuncional?
Los punteros son algo similares: puedo usar punteros para crear cualquier estructura de datos posible. El problema también es el mismo: dado que puedo crear cualquier estructura de datos usando un puntero, ver un puntero en el código no me dice exactamente nada sobre qué tipo de estructura de datos se pretendía.
También significa que, así como es bastante fácil crear accidentalmente un bucle infinito con un goto, es posible crear todo tipo de estructuras no deseadas con punteros.
El problema es que si bien hemos estudiado el control de flujo y comprobado que algunas estructuras básicas (la mayoría de las cuales están modeladas bastante bien por los bucles estándar y demás) pueden crear cualquier control de flujo necesario, * no * tenemos tal prueba similar con respecto a las estructuras de datos, es decir, no podemos señalar un conjunto específico de reemplazos más especializados que nos garanticen la capacidad de crear las mismas estructuras de datos.
Como tal, independientemente del grado en que uno quiera deshacerse de los punteros por completo, actualmente no tenemos un reemplazo que garantice que proporcione el mismo conjunto de capacidades (al menos a mi leal saber y entender). La alternativa, por lo tanto, es generalmente crear punteros que admitan solo un subconjunto de las capacidades en (para el ejemplo obvio) punteros en C o C ++, y proponer un nombre diferente para el resultado (y, con fines de marketing, una garantía “no, estos realmente, verdaderamente, definitivamente son * no * punteros”). Sin embargo, eso no cambia el hecho de que el resultado realmente son indicadores. Tampoco cambia el hecho de que admitir un conjunto de funciones más pequeño que el permitido por C y C ++ tampoco es nada nuevo: los punteros Pascales (por un ejemplo obvio) eran mucho más restringidos y no admitían la aritmética en los punteros, pero eran Todavía claramente punteros.