elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el Twitter! de elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [Problema - novato] En este caso, ¿referencia, puntero u otra manera? ¿por qué?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: [Problema - novato] En este caso, ¿referencia, puntero u otra manera? ¿por qué?  (Leído 4,184 veces)
EzianGES

Desconectado Desconectado

Mensajes: 36


Ver Perfil
[Problema - novato] En este caso, ¿referencia, puntero u otra manera? ¿por qué?
« en: 18 Febrero 2014, 13:46 pm »

Muy buenas tardes gente... ¿cómo les va? Estoy con una pequeña duda... hace unos días retomé programación, y agarré C++ -aunque por problemas eléctricos estuve sin pc algunos días-. Estoy recién comenzando con punteros, referencias, estructuras, etc y estoy probando pequeños programas para ir entendiendo el funcionamiento.

Pues bien, estuve haciendo un pequeño programa en donde se agrega mediante un bucle for valores de 4 en 4 a cada elemento. Es decir, array[0] = 4, array[1] = 8, etc.
Para esto, y a fines de practicar, lo hice utilizando punteros de la siguiente manera:

EDIT:
Código
  1. #include <iostream>
  2. #include <string>
  3. int main ()
  4. {
  5.    int matriz[10];
  6.    int *ptr = NULL;
  7.    int valor = 4;
  8.    ptr = matriz;
  9.    for (int i=0; i < 10; i++) {
  10. matriz[i] = valor;
  11. std::cout << " DIRECCIÓN: " << ptr;
  12. std::cout << "| VALOR: " << *ptr << std::endl;
  13. ptr++;
  14. valor += 4;
  15.    }
  16. return 0;
  17. }
  18.  
  19.  
  20.  

El programa muestra una salida en terminal como la siguiente:
Citar
ADRESS: 0x601180| VALUE: 4
 ADRESS: 0x601184| VALUE: 8
 ADRESS: 0x601188| VALUE: 12
 ADRESS: 0x60118c| VALUE: 16
 ADRESS: 0x601190| VALUE: 20
 ADRESS: 0x601194| VALUE: 24
 ADRESS: 0x601198| VALUE: 28
 ADRESS: 0x60119c| VALUE: 32
 ADRESS: 0x6011a0| VALUE: 36
 ADRESS: 0x6011a4| VALUE: 40

Funciona correctamente peeeeero....

Mis dudas son:
1 ) ¿Existe otra alternativa sin usar punteros?
2 ) De ser así, ¿cuál sería la ideal para ustedes?
3 ) En la línea 29 utilizo puntero++ con el fin de avanzar a la siguiente dirección, funciona, pero está bien pensado o funciona de pedo? jaja
4 ) De estar bien el código, ¿alguna sugerencia para este noob? xD Además de los comentarios que los quité :P

Gracias de antemano y les mando un abrazo.



« Última modificación: 18 Febrero 2014, 15:20 pm por EzianGES » En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: [Problema - novato] En este caso, ¿referencia, puntero u otra manera? ¿por qué?
« Respuesta #1 en: 18 Febrero 2014, 14:54 pm »

1. No escribas en mayúsculas negrita, queda feo.

2. En el siguiente código:

Código
  1. int valor;
  2. int *ptr_valor;
  3. valor = 4;
  4. ptr_valor = &valor;
  5. puntero = n;
  6. for (int i=0; i < 10; i++) {
  7. n[i] = *ptr_valor;
  8. showMemoryCellInfoTab(puntero);
  9. puntero++;
  10. *ptr_valor += 4;
  11. }

No entiendo el uso de ptr_valor... de hecho podrías hasta eliminar esa variable:

Código
  1. int valor = 4;
  2. puntero = n;
  3. for (int i=0; i < 10; i++) {
  4. n[i] = valor;
  5. showMemoryCellInfoTab(puntero);
  6. puntero++;
  7. valor += 4;
  8. }

3. Deberías evitar el uso de variables globales. Tal vez sería conveniente crear una clase para gestionar las funciones MemoryCell

4. "n" no dice nada para el nombre de un vector, deberías poner nombres más claros.

5. Queda raro eso de mezclar en tu propio código nombres en español e inglés.

6.  La forma de acceder a "n" en GetMemoryCellInfo y showMemoryCellInfoTab son extraños.


« Última modificación: 18 Febrero 2014, 15:17 pm por eferion » En línea

EzianGES

Desconectado Desconectado

Mensajes: 36


Ver Perfil
Re: [Problema - novato] En este caso, ¿referencia, puntero u otra manera? ¿por qué?
« Respuesta #2 en: 18 Febrero 2014, 15:13 pm »

1 ) Mayúsculas te referís con poner en mayúsculas las iniciales? Generalmente uso mi_funcion, y en nombres de clases uso mayúsculas para iniciales jaja. Me di un capricho :P

2) Es porque estoy experimentando y quería ver alguna noobeada.

3) No llegué a POO en C++, no conozco la sintáxis :P Usé estructuras para comprenderlas mejor, al principio no me funcionó, hasta que entendí un poco (?)

4) Si, cuando programo algo mas sólido uso identificadores descriptivos, pero al ser una prueba sencilla me resulta mas rápido tipear "n", no voy a reutilizar código de esto, aunque debería respetar un poco mas que ahora vengo a pedir ayuda y lo tienen que leer, así que disculpá D:

5) Si, nunca mezclo, pero me estaba tirando errores, y fuí buscando la solución. Una cosa la escribí ayer a la noche (en inglés) y hoy probé, y metí cosas en español jaja

6) ¿A qué te referís con "extraño"?


Gracias por la respuesta rápida vieja, te agradezco mucho!

EDIT:
Acá el código como corresponde, disculpá haber sido tan desconsiderado jaja

Código
  1. #include <iostream>
  2. #include <string>
  3. int main ()
  4. {
  5. int matriz[10];
  6. int *ptr = NULL;
  7. int valor = 4;
  8.    ptr = matriz;
  9.    for (int i=0; i < 10; i++) {
  10. matriz[i] = valor;
  11. std::cout << " DIRECCIÓN: " << ptr;
  12. std::cout << "| VALOR: " << *ptr << std::endl;
  13. ptr++;
  14. valor += 4;
  15.    }
  16. return 0;
  17. }
  18.  

¿Los punteros están bien utilizados? Es decir, ¿vos usarías punteros en esta situación?
« Última modificación: 18 Febrero 2014, 15:17 pm por EzianGES » En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: [Problema - novato] En este caso, ¿referencia, puntero u otra manera? ¿por qué?
« Respuesta #3 en: 18 Febrero 2014, 15:16 pm »

1 ) Mayúsculas te referís con poner en mayúsculas las iniciales? Generalmente uso mi_funcion, y en nombres de clases uso mayúsculas para iniciales jaja. Me di un capricho :P

Quería decir negrita...

2) Es porque estoy experimentando y quería ver alguna noobeada.

Para eso intenta cogerte algún manual, te propondrá prácticas con cierto sentido y orden.

3) No llegué a POO en C++, no conozco la sintáxis :P Usé estructuras para comprenderlas mejor, al principio no me funcionó, hasta que entendí un poco (?)

En serio, busca manuales en internet, es la mejor forma de aprender.

6) ¿A qué te referís con "extraño"?

Lo suyo sería pasar el vector directamente en vez de almacenar la posición en memoria en un puntero y luego trastear con el puntero a discrección... que sí, que funciona, pero no es desde luego un mecanismo ni elegante ni seguro ni sencillo de mantener.

¿Los punteros están bien utilizados? Es decir, ¿vos usarías punteros en esta situación?

Como bien dices se trata de practicar, pero a este ejercicio no le veo demasiado sentido, busca un manual y haz las prácticas que te propone... si quieres entonces pásame tu versión y te comento cómo lo habría hecho yo.
« Última modificación: 18 Febrero 2014, 15:22 pm por eferion » En línea

EzianGES

Desconectado Desconectado

Mensajes: 36


Ver Perfil
Re: [Problema - novato] En este caso, ¿referencia, puntero u otra manera? ¿por qué?
« Respuesta #4 en: 18 Febrero 2014, 15:19 pm »

Quería decir negrita...

Lo suyo sería pasar el vector directamente en vez de almacenar la posición en memoria en un puntero y luego trastear con el puntero a discrección... que sí, que funciona, pero no es desde luego un mecanismo ni elegante ni seguro ni sencillo de mantener.


¿A qué te estarías refiriendo con "trastear con el puntero a discreción"?
Si, ahí edité el código, mas limpio, como corresponde :P También agregué una pregunta:
¿Los punteros están bien utilizados? Es decir, ¿vos usarías punteros en esta situación?


2) Estoy leyendo "Jumping into C++" y complementando con material extra que vaya googleando o foreando.
Respecto a POO, conozco los conceptos, (usé Python), pero quiero ponerme mas al tanto con estos temas de punteros y similares antes de pasar a POO.
También algunos videotutoriales jeje

Los punteros los utilicé porque en la tabla quería mostrar dirección y valor contenido... y hasta donde se solo lo puedo hacer mediante punteros :P

Estoy haciendo las prácticas de todas formas, pero a veces me surgen dudas puntuales sobre algo y empiezo a barrenar jaja
« Última modificación: 18 Febrero 2014, 15:26 pm por EzianGES » En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: [Problema - novato] En este caso, ¿referencia, puntero u otra manera? ¿por qué?
« Respuesta #5 en: 18 Febrero 2014, 15:24 pm »

Código
  1. #include <iostream>
  2. #include <string>
  3. int main ()
  4. {
  5.  int matriz[10];
  6.  int valor = 4;
  7.  for (int i=0; i < 10; i++)
  8. {
  9.    matriz[i] = valor;
  10.    valor += 4;
  11.  
  12.    std::cout << " DIRECCIÓN: " << &matriz[i];
  13.    std::cout << "| VALOR: " << matriz[i] << std::endl;
  14.  }
  15. return 0;}
En línea

EzianGES

Desconectado Desconectado

Mensajes: 36


Ver Perfil
Re: [Problema - novato] En este caso, ¿referencia, puntero u otra manera? ¿por qué?
« Respuesta #6 en: 18 Febrero 2014, 15:27 pm »

Código
  1. #include <iostream>
  2. #include <string>
  3. int main ()
  4. {
  5.  int matriz[10];
  6.  int valor = 4;
  7.  for (int i=0; i < 10; i++)
  8. {
  9.    matriz[i] = valor;
  10.    valor += 4;
  11.  
  12.    std::cout << " DIRECCIÓN: " << &matriz[i];
  13.    std::cout << "| VALOR: " << matriz[i] << std::endl;
  14.  }
  15. return 0;}

Nah, mirá soy un neófito. Si bien quise experimentar con punteros, no se me había ocurrido esa manera.
man, muchísimas gracias por las correcciones.
En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: [Problema - novato] En este caso, ¿referencia, puntero u otra manera? ¿por qué?
« Respuesta #7 en: 18 Febrero 2014, 15:30 pm »

Hay muchas formas de programar absolutamente lo mismo... la forma de pensar de cada uno es un mundo.
En línea

EzianGES

Desconectado Desconectado

Mensajes: 36


Ver Perfil
Re: [Problema - novato] En este caso, ¿referencia, puntero u otra manera? ¿por qué?
« Respuesta #8 en: 18 Febrero 2014, 15:32 pm »

Hay muchas formas de programar absolutamente lo mismo... la forma de pensar de cada uno es un mundo.

Si, el problema es que a veces pienso que mi forma de pensar es un tanto retardada para programar... no sé a cuántos programadores les pasa cosas como las de recién jaja
En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: [Problema - novato] En este caso, ¿referencia, puntero u otra manera? ¿por qué?
« Respuesta #9 en: 18 Febrero 2014, 15:35 pm »

Cuando uno decide que quiere dedicarse... no se, a pintar por ejemplo, su primera obra no acaba pareciéndose en nada a un Goya... sus primeros pasos serán torpes y su estilo lo irá encontrando por el camino a base de perfeccionar su técnica.

Nadie nace sabiendo...ni tu ni yo ni nadie... por qué te iban a salir los programas a la primera?? Da gracias de que no es así, de otra forma no aprenderías absolutamente nada.

Aprender a programar es como todo, práctica, paciencia e invertir tiempo.

En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Cuestión puntero y referencia
Programación C/C++
darkvidhack 4 3,046 Último mensaje 10 Mayo 2011, 16:31 pm
por satu
[SOLUCIONADO] C++ - Error con memoria dinámica: ¿Puntero por referencia?
Programación C/C++
xaps 7 5,659 Último mensaje 22 Noviembre 2013, 17:16 pm
por lapras
pasar por referencia un puntero
Programación C/C++
m@o_614 2 7,120 Último mensaje 18 Enero 2014, 18:13 pm
por rir3760
hay manera de ver el ordenador de otra persona que este conectada a mi red ?
Hacking Wireless
dark_night 6 4,878 Último mensaje 13 Diciembre 2017, 20:12 pm
por AXCESS
Hay manera de encender el portátil de otra manera? « 1 2 3 »
Windows
BlackMorror5 20 9,501 Último mensaje 13 Abril 2022, 22:33 pm
por stack
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines