Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: KISKE en 18 Junio 2013, 10:55 am



Título: Pasar matriz char a una función como referencia
Publicado por: KISKE en 18 Junio 2013, 10:55 am
Hola,
Tengo un problema al pasar una matriz char a una función como referencia, he intentado como veinte formas diferentes y todas me arrojan errores, iguales o diferentes.

Es para un trabajo de la facultad, todavía no vimos punteros, por lo que no los podemos usar, y sinceramente no se si estoy o no usando punteros, si pudieran aclararme, se los agradecería.

Código
  1. #include <iostream>
  2. #include <stdio.h>
  3.  
  4. int ingresarDatos__PrimerLote(char &, int &, int &);
  5.  
  6. int main()
  7. {
  8. char descCat[7][64];
  9.  
  10. int sueldoCat[7];
  11. int valorHoraExtraCat[7];
  12.  
  13. ingresarDatos__PrimerLote(&descCat, &sueldoCat, &valorHoraExtraCat);
  14.  
  15. system("pause");
  16.  
  17. return 0;
  18. }
  19.  
  20. int ingresarDatos__PrimerLote(char *descCat[7][64], int *sueldoCat[7], int *valorHoraExtraCat[7])
  21. {
  22. int i;
  23. for(i = 1; i <= 6; ++i)
  24. {
  25. printf("Ingrese descripción de la categoría #%d: ", i);
  26. fflush(stdin);
  27. gets(*descCat[i]);
  28.  
  29. printf("Ingrese sueldo basico de la categoría #%d: ", i);
  30. scanf("%d", *sueldoCat[i]);
  31.  
  32. printf("Ingrese el valor de la hora extra de la categoría #%d: ", i);
  33. scanf("%d", *valorHoraExtraCat[i]);
  34. }
  35.  
  36. return 0;
  37. }

NOTA: Uso Dev-C++ 4.9.9.2

Saludos y gracias de antemano!


Título: Re: Pasar matriz char a una función como referencia
Publicado por: amchacon en 18 Junio 2013, 12:30 pm
Respuesta corta: Las matrices siempre se pasan por referencia por lo que no hace falta ponerlo explícitamente:

Código
  1. int ingresarDatos__PrimerLote(char descCat[7][64], int sueldoCat[7], int valorHoraExtraCat[7]); // Prototipo
  2.  
  3. int main()
  4. {
  5.   //...
  6.  
  7.   ingresarDatos__PrimerLote(desCat,sueldoCat,valorHoraExtraCat);
  8.  
  9.  //...
  10. }
  11.  
  12. int ingresarDatos__PrimerLote(char descCat[7][64], int sueldoCat[7], int valorHoraExtraCat[7])
  13. {
  14.  //...
  15. }

Respuesta larga: desCat es una referencia (puntero) al primer elemento del vector. Como no estás cambiando la referencia sino los datos, se puede pasar por valor perfectamente.


Título: Re: Pasar matriz char a una función como referencia
Publicado por: KISKE en 18 Junio 2013, 13:07 pm
Respuesta corta: Las matrices siempre se pasan por referencia por lo que no hace falta ponerlo explícitamente:

Código
  1. int ingresarDatos__PrimerLote(char descCat[7][64], int sueldoCat[7], int valorHoraExtraCat[7]); // Prototipo
  2.  
  3. int main()
  4. {
  5.   //...
  6.  
  7.   ingresarDatos__PrimerLote(desCat,sueldoCat,valorHoraExtraCat);
  8.  
  9.  //...
  10. }
  11.  
  12. int ingresarDatos__PrimerLote(char descCat[7][64], int sueldoCat[7], int valorHoraExtraCat[7])
  13. {
  14.  //...
  15. }

Respuesta larga: desCat es una referencia (puntero) al primer elemento del vector. Como no estás cambiando la referencia sino los datos, se puede pasar por valor perfectamente.
Hola amchacon,
Se solucionaron los problemas y funciona correctamente, me complique demasiado al pedo.

Muchas gracias por la explicación también!