[C con Clase] Aclaracion punteros

jipalaciosortega en gmail.com jipalaciosortega en gmail.com
Mie Jul 20 14:19:20 CEST 2011


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
 
Hola,

El 20/07/2011 9:53, rmmts rmmts escribió:
> El 20 de julio de 2011 00:41, anarkik anarkik <anarkicat en gmail.com
> <mailto:anarkicat en gmail.com>> escribió:
>
> Hola, este es mi primer mensaje, aunque llevo un tiempo leyendo la
> lista de correo.
>
> Me gustaria alguna aclaracion si puede ser sobre los punteros. Soy
> estudiante de programacion, pero solo estudiamos con Java, y en
> Java, como ya sabeis, el programador no maneja los punteros
> directamente, si no me equivoco lo hace java de manera interna. El
> tema es que llevo un tiempo aprendiendo c++ por mi cuenta, y
> quisiera algunas aclaraciones, si puede ser.
>
> El tema es el siguiente... he leido bastante y he provado tambien
> sobre esto, entiendo a la perfeccion que es un puntero, y los he
> usado sin ningun problema, pero no acabo de comprender el concepto,
> es decir, por lo que he leido, se dice que son muy utiles, pero yo
> sigo sin verle tan gran utilidad "supongo que por la poca
> complejidad de los programas que aun estoy haciendo". De momento,
> estoy haciendo todos los ejercicios que tenia para java, y aun no
> he necesitado de punteros "o al menos eso creo".
>
> Me gustaria saber, en que momento es necesario usar punteros, ya
> que como he dicho, no se que utilidad encontrarle, ya que uso las
> variables directamente, y no se queventaja me podria dar un puntero
> que apunte a esas variables... estaria bien algun ejemplo practico
> de donde se deben usar punteros.
>
> Otra cosa que he leido y no acabo de entender, es que se dice que
> los punteros se pueden usar para hacer arrays dinamicos, pero en
> todo lo que he visto, siempre se le especifica el tamaño del
> array... entonces, en realidad no es dinamico, no? por ejemplo en
> java, esta ArrayList, LinkedList, TreeSet, etc.. que son dinamicos
> y en ningun momento le digo que tamaño de memoria debe usar.
>
> Y una ultima cosa, y que me podria servir de ejemplo... estoy
> usando librerias qt para entorno grafico, i siguiendo con esto de
> los punteros os pongo un ejemplo:
>
> #include <qapplication.h> #include <qlabel.h>
>
> int main(int argc, char *argv[]) { QApplication app(argc, argv);
> QLabel *label = new QLabel("Hello Qt!"); label->show(); return
> app.exec(); }
>
>
> Por que se usa el label como puntero? no seria lo mismo usarlo sin
> ser puntero? que ventaja tiene usarlo como puntero, yh porque razon
> en ese ejemplo se usa como puntero?
Aquí se utiliza label como puntero por como está definida la función.
Al crear un objeto , se devuelve la referencia a objet, y no el objeto
en sí. Cuando haces esto:

QLabel *label =

Lo que estás diciendo es "declarame una varible label que es un
puntero a un tipo QLabel".
Si en lugar de hacer lo anterior hicieses esto:

QLabel label =

Lo que estás diciendo es creame una variable label que es un QLabel.
El porqué, lo más seguro que sea por conformaciones en la
programación. Cuando programas en C, lo que pueda ocupar mucho
espacio, lo que se hace es manejarlo como un puntero, así si necesitas
pasarlo por una función, pasas el objeto creado (por referencia), y no
una copia de este (ya que puede ser demasiado grande).
>
>
>
> Espero algunas aclaraciones, muchas gracias de antemano.
>
>
> _______________________________________________ Lista de correo
> Cconclase Cconclase en listas.conclase.net
> <mailto:Cconclase en listas.conclase.net>
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
>
>
Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>
>
>
>
> Hola, un ejemplo donde yo he visto bastante claro la utilidad del
> uso de punteros es este.
>
> #include <cstdio> void duplica( int * );
>
> int main () { int X = 10; printf("Valor inicial: %d\n", X);
> duplica( &X ); printf("Doble de lo anterior:%d\n", X); return 0; }
>
> void duplica( int *ptrX ) { // La funcion no devuelve nada porque
> modifica el valor por referencia. *ptrX = ( *ptrX * 2 ); }
>
>
> Modifica el valor de una variable por referencia sin tener que
> hacer un return para modificar el valor. Aquí incluso parece poco
> útil aun, pero imagina que en vez de un valor solo, tienes varios
> que modificar. Espero que te sirva.
Claro!!, es otra utilidad de los punteros, gracias a estos, podemos
modificar el valor de una variable de forma directa. También se podría
hacer una función que devolviese un entero y luego aisgarselo fuera de
la función, pero la mejor manera es así, como puntero.
>
>
> _______________________________________________ Lista de correo
> Cconclase Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
>
>
Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ


- -- 
                                           _ _ _   _   _ _ _ _   _ _ _
Jose Ignacio Palacios Ortega              /_   _/ / / /  _   / / _   /
Telf: +34 637 058 813                       / /  / / / /_ / / / / / /
Correo-e: jipalaciosortega en gmail.com  _    / /  / / / _ _ _/ / / / /
Msn: jipalaciosortega en gmail.com      / /_ / /  / / / /      / /_/ /
ID firma PGP: 0x0EB87E48             \ _ _ /  /_/ /_/      /_ _ _/
Huella PGP:61CC 5DA0 827B C3AB F83C 2A55 78AF B317 0EB8 7E48
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (MingW32)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/
 
iEYEARECAAYFAk4mx8cACgkQeK+zFw64fkjSAwCcDOj/s9Fd8cTonFg3mWdVZZIu
qQ8An1Y+LivluKBYO/zEWZDet/ROwkd3
=NsX2
-----END PGP SIGNATURE-----





Más información sobre la lista de distribución Cconclase