Autor
|
Tema: C/C++ Dudas parámetros (Leído 12,594 veces)
|
.:BlackCoder:.
Desconectado
Mensajes: 388
Cada dia C++!!
|
Me invente un ejemplo yo... Observa este code... oid funcionx(int *e); int main(int argc, char *argv[]) { int *p; funcionx(p); for (int i=0;i<4;i++) p[i]=i+1;//Aca obviamente se vuelve loco... for (int i=0;i<4;i++) cout<<p[i]<<" "; cout<<endl; cin.get(); return EXIT_SUCCESS; } void funcionx(int *e){ e= new int [4]; }
Como solventas eso... Lo de asignar memoria con una funcion... Saludos... Que pregunta mas obvia... Y eso que yo mismo conteste... Aca tienes un ejemplo dr.~ donde se aclara todo... void funcionx(int *&e); void apuntaa1(int *e); void apuntaa2(int *&e); int main(int argc, char *argv[]) { int *p; funcionx(p); for (int i=0;i<10;i++) p[i]=i+1; for (int i=0;i<10;i++) cout<<p[i]<<" "; cout<<endl; apuntaa1(p); cout<<*p<<endl; apuntaa2(p); cout<<*p<<endl; delete[] p; cin.get(); return EXIT_SUCCESS; } void apuntaa1(int *e){ e++; } void apuntaa2(int *&e){ e++; } void funcionx(int *&e){ e= new int [10]; }
|
|
« Última modificación: 23 Mayo 2010, 21:46 pm por El_nuevo_HH »
|
En línea
|
"No te esfuerzes por saber mas, esfuerzate por ser el mejor en lo que sabes... Y asi sabras mas" .:BlackCoder:. jajaja
|
|
|
h0oke
Desconectado
Mensajes: 2.059
Coder ~
|
Para asignar memoria con una función, lo solucioné con punteros dobles. Fijate en [C] - Duda estructuras. void data_reserve(st_p **P){ (*P ) = (st_p *)(malloc(sizeof(st_p ))); (*P )->name = (char *)(malloc(sizeof(char) * LIMIT )); (*P )->dir = (char *)(malloc(sizeof(char) * LIMIT )); (*P )->phone = (char *)(malloc(sizeof(char) * LIMIT )); }
EDIT: Cierto, gracias por tu ejemplo. Como consejo -y creo que ningún programador de C++ va a decirte lo contrario- es que uses las referencias cuando puedas y uses los punteros cuando debas. Gracias littlehorse, tomaré tu consejo.
|
|
« Última modificación: 23 Mayo 2010, 21:49 pm por dr.~ »
|
En línea
|
|
|
|
.:BlackCoder:.
Desconectado
Mensajes: 388
Cada dia C++!!
|
Me gusta mas como lo hize... Ademas eso ya te lo dije yo mismo, es que ando distraido, y no supe plantear la pregunta... Lo que quise decir es como?, cuando se trabaja con listas se asigna memoria (como las funciones push_back) con funciones externas al main... y sin pasar los punteros como referencias... ejemplo: Voy a poner solo una parte el codigo completo esta en: http://foro.elhacker.net/empty-t288131.0.htmlstruct nodo{ int nro; struct nodo *sgte; }; typedef struct nodo *Tlista; void insertaralfinal(Tlista &lista,int valor) { Tlista t,q; q=new(struct nodo); q->nro=valor; q->sgte=NULL; if(lista==NULL) lista=q; //Fijense aca else {t=lista; while(t->sgte!=NULL) t=t->sgte; t->sgte=q;} }
Como es que funciona eso?, yo supongo que es porq se hizo un typedef en el que se define Tlista como un puntero y se pasa una referencia: insertaralfinal(Tlista &lista,
Pero pes no estoy seguro... Asi que si alguien da detalles del funcionamiento interno de ese proceso... Saludos...
|
|
|
En línea
|
"No te esfuerzes por saber mas, esfuerzate por ser el mejor en lo que sabes... Y asi sabras mas" .:BlackCoder:. jajaja
|
|
|
Littlehorse
All the world's a stage
Moderador
Desconectado
Mensajes: 2.714
Nie Dam Sie
|
Es una referencia a puntero. Igualmente no leí el código con atención, los códigos de mapers me hacen doler la cabeza (podrías haber buscado otro ejemplo ) Saludos!
|
|
|
En línea
|
An expert is a man who has made all the mistakes which can be made, in a very narrow field.
|
|
|
h0oke
Desconectado
Mensajes: 2.059
Coder ~
|
Es una referencia a puntero. Igualmente no leí el código con atención, los códigos de mapers me hacen doler la cabeza (podrías haber buscado otro ejemplo ) Saludos! Idem Me gusta mas como lo hize... Ademas eso ya te lo dije yo mismo, es que ando distraido, y no supe plantear la pregunta.. Igualmente, en C no podía utilizar new... y tampoco referenciar un puntero xD
|
|
|
En línea
|
|
|
|
^Winder^
Desconectado
Mensajes: 2.776
El mundo no es tuyo, es de todos.
|
Yo en C++ suelo usar & para los pasos por referencia, y los * para crear objetos grandes, pero no quiere decir que sea lo mejor como dice Little, dependerá de cada programador.
|
|
|
En línea
|
Yo apoyo la esperanza de Caylees. Frenemos la Leucemia:www.cayleeshope.comLibertad conquistada. (Justicia )
|
|
|
Littlehorse
All the world's a stage
Moderador
Desconectado
Mensajes: 2.714
Nie Dam Sie
|
No, no fue eso lo que dije. Precisamente todo lo contrario. Usar referencias y punteros depende exclusivamente de lo que quieras hacer. No es algo que dependa del gusto del programador, ya que usar punteros en lugares donde una referencia basta es una mala practica. Saludos
|
|
|
En línea
|
An expert is a man who has made all the mistakes which can be made, in a very narrow field.
|
|
|
|
final_frontier
Wiki
Desconectado
Mensajes: 583
WOLOLOOO! Deal with it x)
|
Hay un par de diferencias bastante gordas con lo que son los pasos por referencia usando el operador * y el operador & Una función con el & lo que hace es pasar la variable directamente a la hora de llamarla para indicarle a la función que cuando acabe el ámbito de la función que no se nos cargue la variable Si a una función le pasas un puntero simple, lo que haces es crear por valor una variable que almacena una dirección de memoria (ojo, por VALOR), y qué pasa cuando acaba el ámbito de la función? la variable y su contenido se van a la basura El ejemplo es el siguiente: Yo tengo var1 de tipo entero y la función a la que paso var1 como parámetro es por puntero simple, lo que hace C++ es crear una variable de tipo puntero (digamosle mipuntero) que señala (que por cierto es de mala educación xD) a var1... cuando acaba la función, se nos elimina aquello a lo que apunta mipuntero, a que apunta? a var1, pues variable a la basura Y es así como se puede ir a la porra un programa entero ¿Lo he explicado bien o he metido el remo como de costumbre? qué malo es programar a las cuatro de la madrugada
|
|
|
En línea
|
Sie ist der hellste Stern von allen und wird nie vom Himmel fallen...
|
|
|
Littlehorse
All the world's a stage
Moderador
Desconectado
Mensajes: 2.714
Nie Dam Sie
|
La verdad que la docencia definitivamente no es lo tuyo, porque explicando vas mal. Igualmente acepto la excusa de la hora, pero lee el hilo entero antes de postear . Lo único que se puede sacar en limpio de todo lo que dijiste fue lo de los ámbitos locales de las variables, pero eso ya esta mencionado en post anteriores. Precisamente por esa razón estábamos hablando de este tema. Saludos!
|
|
|
En línea
|
An expert is a man who has made all the mistakes which can be made, in a very narrow field.
|
|
|
|
|