Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: roser24 en 5 Mayo 2010, 10:11 am



Título: Consultas sobre punteros en funciones por referencia..
Publicado por: roser24 en 5 Mayo 2010, 10:11 am
Hola chicos,primeramente al ser mi primer post presentarme mi nombre es rosario y he estado viendo C por mi cuenta pero al llegar a punteros me he detenido ya que se me han generado dudas..

Por ejemplo,
Cuando en el enunciado de un ejercicio me dicen:
Crear una función a la que se le pasará una cadena de caracteres de cualquier
 longitud
  o  " Crear una función que copie el contenido de un primer vector de flotantes
en otro segundo con el mismo número de elementos. ",en Relacion al numero de elementos yo realize los ejercicios usando despues del printf en el cual el usuario indique la longitud lo siguiente:
float *vec=new float[l]; // caso 1 donde l es la longitud..
char *cad = new char[l+1];// le puse el mas uno por el /0 ..

claro que luego use un delete para liberar la memoria reservado delete []vec;
Pero no se si hago bien..
os pongo el codigo del primer ejercicio para que porfavor me deis vuestra opinion..
Salu2
Código
  1. /*5.    Crear una función que copie el contenido de un primer vector de flotantes
  2. en otro segundo con el mismo número de elementos. La función debe ser válida para
  3. cualquier par de vectores con el mismo número de elementos. Genera el
  4. programa principal para poder ejecutar la función creada.*/
  5.  
  6. #include<stdio.h>
  7. #include<string.h>
  8. void copiar_valor(float *,int,float *);
  9. void print_vector(float *,int,float *);
  10. void main(){
  11.  
  12. int l=0,i=0;
  13. do{
  14. printf("Introduce la longitud del primer vector:\n");
  15. scanf("%d",&l);
  16. }while(l<0);
  17. printf("La longitud del segundo vector sera la misma\n");
  18. float *vec=new float[l];
  19. float *vec2=new float[l];
  20.  
  21. for(i=0;i<l;i++){
  22. printf("inserta valores para el primer vector %d:",i);
  23. scanf("%f",vec+i);
  24. }
  25.  
  26.  
  27. copiar_valor(vec,l,vec2);
  28. print_vector(vec,l,vec2);
  29. delete []vec;
  30. delete []vec2;
  31. }
  32. void copiar_valor(float *vector,int size,float *vector2){
  33. int i;
  34. for(i=0;i<size;i++){
  35.  
  36. *(vector2+i) = *(vector+i);
  37. }
  38.  
  39.  
  40. }
  41. void print_vector(float *vector,int size,float *vector2){
  42. int j;
  43. for(j=0;j<size;j++){
  44. printf("%0.2f\n",*(vector2+j));
  45. }
  46. for(j=0;j<size;j++){
  47. printf("\n%0.2f",*(vector+j));
  48.  
  49.  
  50. }
  51. }
  52.  

..Mil gracias  :)


Título: Re: Consultas sobre punteros en funciones por referencia..
Publicado por: Gallu en 5 Mayo 2010, 15:29 pm
Chica , la verdad por más que le de vueltas no se cual es la duda que tienes ...   :-X


Título: Re: Consultas sobre punteros en funciones por referencia..
Publicado por: roser24 en 5 Mayo 2010, 17:03 pm
hola la duda es en relacion a que si esta bien que cuando el el enunciado de los ejercicios me digan "sea cual sea el numero de los elementos.."Hago bien usando NEW?
float *vec=new float[l]; // caso 1 donde l es la longitud..

el lenguaje que utilizo es C pero no uso malloc porque me da error ,sin embargo al usar new no me da errores y compila  y ejecuta,.. Y no se si hago bien.. con el uso del NEW para estos ejercicios...

y luego otra duda sabeis de alguna pagina en la que pueda encontrar ejercicios resueltos de cadenas en paso por referencia? tengo un ejercicio de cadenas y por mas que gogleo no encuentro.. =(


Título: Re: Consultas sobre punteros en funciones por referencia..
Publicado por: Og. en 5 Mayo 2010, 17:05 pm
Tu código esta bien hecho. Con respecto al manejo de punteros, esta correcto tu programa.

Saludos!

Edit:

Cuando envías valores por referencia, hacer algo así como una copia de la variable ingresada, esta variable es idéntica a la original, comparten su memoria asignada (no confundir con punteros, Estos no comparten memoria con la variable matriz, editan sectores de memoria). Ve el siguiente ejemplo.

Código
  1. void ala(char[]);
  2.  
  3. int main()
  4. {
  5.    char cadena[] = "Hola";
  6.    printf("%p\n", cadena);
  7.    ala(cadena);
  8. }
  9.  
  10. void ala(char text[])
  11. {
  12.    printf("%p\n", text);
  13. }

Cuando tu envías la cadena así: "char text[]" todo se envía por referencia.


Título: Re: Consultas sobre punteros en funciones por referencia..
Publicado por: Akai en 5 Mayo 2010, 17:06 pm
Vale, ahora se entiende la duda. New es una función de c++. para usar Malloc, calloc, free, realloc y demás en C, necesitas incluir la librería stdlib

Advertencia - mientras estabas leyendo, una nueva respuesta fue publicada. Probablemente desees revisar tu mensaje.


Título: Re: Consultas sobre punteros en funciones por referencia..
Publicado por: roser24 en 5 Mayo 2010, 17:47 pm
Muchas gracias a todos por responder,tenia razon akai,me daba error por no usar la libreria stdlib.h cuando queria probar con malloc,..me leere mucho ya que solo habia oido de malloc y free pero no de calloc ,realloc..
Y lo del new lo preguntaba porque mañana tendre un examen de C y seguramente cae algo de punteros y no vaya a ser que el profe al ver mi uso de new me ponga mala nota ya que es de C++ y no de C..xD
Por utlimo lo de las cadenas... no lo entendi muy bien ,,pero para no liaros con 2 temas en el mismo post creare uno nuevo.Nuevamente mil gracias por despejar mis dudas =),