Docsity
Docsity

Prepara tus exámenes
Prepara tus exámenes

Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity


Consigue puntos base para descargar
Consigue puntos base para descargar

Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium


Orientación Universidad
Orientación Universidad


Punteros en Java y en lenguaje C, Guías, Proyectos, Investigaciones de Programación Java

En el presente documento se explica de manera detallada cómo se inicializa un puntero en ambos lenguajes de programación y la diferencia que existe entre ellos

Tipo: Guías, Proyectos, Investigaciones

2020/2021

Subido el 03/06/2023

francisco-de-jesus-rodriguez-robles
francisco-de-jesus-rodriguez-robles 🇲🇽

5 documentos

1 / 11

Toggle sidebar

Esta página no es visible en la vista previa

¡No te pierdas las partes importantes!

bg1
INSTITUTO TECNOLÓGICO DE TEPIC.
INGENIERÍA MECATRÓNICA. PROGRAMACIÓN BÁSICA.
UNIDAD 6
TRABAJO DE INVESTIGACIÓN: PUNTEROS”.
Docente: Gutiérrez Vargas Hugo César.
Integrantes del equipo:
Rico Bautista Adrián (22400395)
Rodríguez Robles Francisco de Jesús (22400397)
Horario: 8:00 a.m. 9:00 a.m.
Fecha: 28 de Mayo del 2023
pf3
pf4
pf5
pf8
pf9
pfa

Vista previa parcial del texto

¡Descarga Punteros en Java y en lenguaje C y más Guías, Proyectos, Investigaciones en PDF de Programación Java solo en Docsity!

INSTITUTO TECNOLÓGICO DE TEPIC.

INGENIERÍA MECATRÓNICA. PROGRAMACIÓN BÁSICA.

UNIDAD 6

TRABAJO DE INVESTIGACIÓN: “ PUNTEROS”.

Docente : Gutiérrez Vargas Hugo César.

Integrantes del equipo:

Rico Bautista Adrián (224003 95 )

Rodríguez Robles Francisco de Jesús (22400397)

Horario : 8:00 a.m. – 9:00 a.m.

Fecha: 28 de Mayo del 2023

PUNTEROS

En programación, un puntero es una variable especial que almacena la dirección de memoria de otra variable. En otras palabras, un puntero "apunta" a la ubicación en memoria de otro objeto, como una variable o una función. Los punteros son utilizados para varios propósitos, entre ellos:

  1. Acceso y manipulación directa de la memoria: Los punteros permiten acceder y manipular directamente la memoria de un programa. Esto es útil en situaciones donde es necesario trabajar a un nivel más bajo y realizar operaciones directamente sobre los datos almacenados en la memoria.
  2. Paso por referencia: Al pasar un puntero como argumento a una función, se puede modificar el valor original de una variable fuera de la función. Esto se conoce como "paso por referencia" y permite que los cambios realizados en la función se reflejen fuera de ella.
  3. Gestión de estructuras de datos dinámicas: Los punteros son esenciales para trabajar con estructuras de datos dinámicas, como listas enlazadas, árboles, pilas y colas, donde la memoria se asigna y libera dinámicamente durante la ejecución del programa.
  4. Manipulación eficiente de arreglos: Los punteros permiten realizar operaciones eficientes en arreglos al acceder a sus elementos mediante aritmética de punteros. Esto puede ser útil en situaciones donde se necesita un acceso rápido y eficiente a los elementos del arreglo.
  5. Interacción con funciones de bajo nivel y sistemas operativos: En entornos de programación de bajo nivel o al interactuar con el sistema operativo, los punteros son utilizados para realizar tareas como la manipulación directa de la memoria, la gestión de bloques de memoria compartida y la llamada a funciones a través de punteros a funciones.

c) Uso de apuntadores: ¿Cómo se utilizan?. En Java, no se utilizan punteros como en lenguajes como C o C++. En su lugar, se utilizan referencias para acceder y manipular objetos en memoria. Aquí tienes dos ejemplos de uso de referencias en Java: Ejemplo 1: MiObjeto obj1 = new MiObjeto(); MiObjeto obj2 = obj1; obj2.setValor(10); System.out.println(obj1.getValor()); // Imprime 10 En este ejemplo, obj1 y obj2 son referencias al mismo objeto. Al modificar el valor del objeto a través de obj2, el cambio también se refleja en obj1 porque ambas referencias apuntan al mismo objeto en memoria. Ejemplo 2: MiObjeto obj = null; if (condicion) { obj = new MiObjeto(); } if (obj != null) { // Realizar operaciones con obj } En este caso, la referencia obj se inicializa con null. Luego, se verifica una condición y, si se cumple, se crea un nuevo objeto y se asigna a obj. Antes de operar con obj, se verifica si es diferente de null para evitar errores de referencia nula. d) Llamadas por valor y referencia: ¿A qué se refiere cada una?, ¿Cuál es la diferencia? En Java, las llamadas a métodos y la asignación de argumentos se realizan por valor. Esto significa que cuando pasas un argumento a un método, se pasa una copia de su valor, no la referencia en sí misma. Esto difiere del paso por referencia que se encuentra en lenguajes como C++. La diferencia entre llamadas por valor y llamadas por referencia radica en cómo se manejan los argumentos y si los cambios realizados en el método afectan o no al valor original.

Ejemplo 1 - Llamada por valor: int numero = 5; incrementar(numero); System.out.println(numero); // Imprime 5 public void incrementar(int n) { n++; } En este caso, se pasa una copia del valor de numero al método incrementar(). Dentro del método, se incrementa el valor de n, pero no afecta a la variable numero original fuera del método. Ejemplo 2 - Llamada por referencia: MiObjeto obj = new MiObjeto(); modificar(obj); System.out.println(obj.getValor()); // Imprime 20 public void modificar(MiObjeto obj) { obj.setValor(20); } En este ejemplo, se pasa una referencia al objeto obj al método modificar(). Dentro del método, se modifica el valor del objeto referenciado por obj, y esto afecta al objeto original fuera del método. Es importante tener en cuenta que en Java solo se pasa la copia de la referencia, por lo que no se puede cambiar la referencia original dentro del método.

c) Uso de apuntadores: ¿Cómo se utilizan? Los punteros en C se utilizan para una variedad de tareas, como:

  • Manipulación directa de la memoria: Los punteros permiten acceder y modificar directamente la memoria, lo que puede ser útil para implementar estructuras de datos personalizadas o trabajar con arreglos de manera eficiente.
  • Pasar parámetros por referencia: Al pasar un puntero como argumento a una función en C, es posible modificar el valor original de una variable. Esto se conoce como "paso por referencia" y permite que los cambios realizados en la función se reflejen fuera de ella. Ejemplo 1: void intercambiar(int *a, int *b) { int temp = *a; *a = *b; *b = temp; } int main() { int num = 10; int num2 = 20; printf("Antes del intercambio: num1 = %d, num2 = %d\n", num1, num2); intercambiar(&num1, &num2); printf("Después del intercambio: num1 = %d, num2 = %d\n", num1, num2); return 0; } En este ejemplo, se define una función intercambiar que intercambia los valores de dos enteros utilizando punteros. Al pasar las direcciones de memoria de num1 y num2 a la función, se modifica directamente el valor original de las variables. Ejemplo 2: void duplicar(int *ptr) { *ptr *= 2; } int main() { int numero = 5; printf("Antes de duplicar: %d\n", numero); duplicar(&numero); printf("Después de duplicar: %d\n", numero); return 0; } En este caso, se define una función duplicar que multiplica por 2 el valor de un entero utilizando un puntero. Al pasar la dirección de memoria de numero a la función, se puede modificar el valor original dentro de la función.

d) Llamadas por valor y referencia: En lenguaje C, las llamadas a funciones pueden ser por valor o por referencia. Esto afecta cómo se pasan los argumentos y si los cambios realizados en la función afectan o no al valor original: Ejemplo 1: Llamada por valor #include <stdio.h> void incrementar(int num) { num++; printf("Valor dentro de la función: %d\n", num); } int main() { int numero = 5; printf("Valor original: %d\n", numero); incrementar(numero); printf("Valor después de la función: %d\n", numero); return 0; } En este ejemplo, la función incrementar recibe un argumento num por valor. Dentro de la función, se incrementa el valor de num. Sin embargo, esta modificación solo ocurre dentro del ámbito de la función y no afecta a la variable numero en la función main. Al imprimir el valor después de la llamada a la función, se observa que numero no ha cambiado.

CONCLUSIÓN

Los punteros son una característica fundamental en lenguajes de programación como Java y C, aunque su manipulación y comportamiento pueden variar entre ambos. En términos generales, un puntero es una variable especial que almacena la dirección de memoria de otra variable. Su utilidad radica en su capacidad para acceder y manipular directamente la memoria, permitiendo una mayor flexibilidad y control en la programación. En este ensayo, exploraremos el concepto de punteros, su utilidad y las diferencias que existen en su manejo entre los lenguajes de programación Java y C. Un puntero, de manera general, es una variable que contiene la dirección de memoria de otra variable. Funciona como un enlace o referencia a un objeto o valor almacenado en la memoria. La utilidad de los punteros radica en diversas áreas de la programación:

  • Permiten un acceso y manipulación directa de la memoria, lo que puede ser útil para implementar estructuras de datos personalizadas o trabajar con arreglos de manera eficiente.
  • Son esenciales para gestionar estructuras de datos dinámicas, donde la memoria se asigna y libera dinámicamente durante la ejecución del programa.
  • Los punteros posibilitan el paso por referencia, lo que significa que los cambios realizados en una función pueden afectar al valor original fuera de ella.
  • Son utilizados para interactuar con funciones de bajo nivel y sistemas operativos, donde se requiere una manipulación directa de la memoria y llamadas a funciones a través de punteros. Si bien los punteros son conceptos generales, su manejo y comportamiento difieren entre los lenguajes de programación Java y C. En Java, el manejo de punteros es más encapsulado debido a que no permite un acceso directo a la memoria. En su lugar, se utilizan referencias, que son variables que apuntan a objetos en memoria gestionados por el recolector de basura. Esto simplifica el manejo de la memoria y reduce la posibilidad de errores como fugas de memoria o accesos no válidos. Sin embargo, no se tiene un control directo sobre las direcciones de memoria, lo que limita la capacidad de manipulación de bajo nivel. Java utiliza el paso de argumentos por valor, lo que significa que se pasa una copia del valor original a las funciones, lo que impide modificar directamente el valor original fuera de ellas. Por otro lado, en el lenguaje C, los punteros son una parte integral y poderosa del lenguaje. Permiten un acceso y manipulación directa de la memoria, lo que proporciona un mayor control y eficiencia en ciertas situaciones. Las diferencias en el manejo de punteros entre Java y C son significativas. Java utiliza referencias gestionadas por el recolector de basura, lo que simplifica el manejo de la memoria pero limita el control directo. En contraste, C permite un acceso y manipulación directa de la memoria, ofrece aritmética de punteros y permite el paso de argumentos por valor y por referencia. El conocimiento y manejo adecuado de punteros son fundamentales para aprovechar al máximo su potencial y evitar posibles errores en la programación.

Bibliografía

Chuidiang. (20 de Septiembre de 2005). BlogSpot. Obtenido de Programacion: Cosillas de programación e informática en las que ando metido.: http://chuidiang.blogspot.com/2005/09/los-punteros-de-java.html Dragon, L. (8 de Octubre de 2015). Apuntadores ( Pointer ) en lenguajes de programación orientada a objetos ( Java y C). Obtenido de La cueva del último dragón: https://www.lastdragon.net/?p= EcuRed. (13 de enero de 2012). EcuRed. Obtenido de https://www.ecured.cu/Operadores_de_puntero INAOE. (22 de Octubre de 2019). INAOE. Obtenido de Ciencias computacionales: https://posgrados.inaoep.mx/archivos/PosCsComputacionales/Curso_Propedeutico/Progr amacion_Estructuras_Datos/Capitulo_3_Apuntadores.pdf Instituto Politécnico Nacional de México. (21 de Abril de 2020). Academia de Informática. Obtenido de UPIICSA: http://www.sites.upiicsa.ipn.mx/estudiantes/academia_de_informatica/estructura_y_rd/ docs/u2/Apuntadores%20en%20Java.pdf Lauterbach, C. (Mayo de 2021). Quora. Obtenido de ¿Por qué no se utilizan punteros en Java?: https://es.quora.com/Por-qu%C3%A9-no-se-utilizan-punteros-en- Java#:~:text=Los%20punteros%20de%20Java%20no,no%20apuntar%C3%A1s%20al%20lug ar%20equivocado. Microsoft. (6 de Abril de 2023). Microsoft. Obtenido de Learn: https://learn.microsoft.com/es- es/dotnet/csharp/language-reference/operators/pointer-related-operators Parzibyte. (20 de Septiembre de 2018). Funciones por referencia y por valor en C. Obtenido de Parzibyte's blog: https://parzibyte.me/blog/2018/09/20/funciones-referencia-valor-c/ Parzibyte. (4 de Abril de 2020). Java: parámetros por referencia o valor. Obtenido de Parzibyte's blog: https://parzibyte.me/blog/2020/04/04/java-parametros-referencia-valor/ Picodotdev. (22 de Enero de 2021). Github. Obtenido de En Java, ¿los argumentos se pasan por valor o por referencia?: https://picodotdev.github.io/blog-bitix/2021/01/en-java-los- argumentos-se-pasan-por-valor-o-por-referencia/ Zator Systems. (2016). Zator. Obtenido de Operadores de punteros: https://www.zator.com/Cpp/E4_9_11.htm