Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: NOB2014 en 29 Septiembre 2016, 19:00 pm



Título: Diferencia con puntero a vector en lenguaje C (dentro y fuera de main).
Publicado por: NOB2014 en 29 Septiembre 2016, 19:00 pm
Hola, gente, como están. -
La consulta es para que me digan que estoy haciendo mal, si está dentro de la función main tengo que utilizar esta sintaxis(línea 16/20)

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4.  
  5. #define MAX 10
  6.  
  7. int main(void){
  8. int a[MAX];
  9. int (*ptrVector)[MAX] = &a;
  10. int i;
  11. srand (time(NULL));
  12.  
  13. printf( "\n" );
  14.  
  15. for(i=0; i<MAX; i++){
  16. (*ptrVector)[i] = rand() % 50;
  17. }
  18.  
  19. for(i=0; i<MAX; i++){
  20. printf(" %d ", (*ptrVector)[i]);
  21. }
  22.  
  23. printf( "\n\n" );
  24.  
  25. return 0;
  26. }

Y si está en otra función esta otra(línea 33/46)

Yo quisiera utilizar siempre la primera pero no sé cómo pasar el puntero correctamente a las funciones. -

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4.  
  5. #define MAX 25
  6.  
  7. void llenar( int *ptrVector );
  8. void mostrar( int  const *ptrVector );
  9. void sumar( int const *ptrVector );
  10.  
  11. int main( void ){
  12. int vector[MAX], ( *ptrVector )[MAX] = &vector;
  13.  
  14. llenar( *ptrVector );
  15.  
  16. mostrar( *ptrVector );
  17.  
  18. //sumar( *ptrVector );
  19.  
  20. printf( "\n\n" );
  21.  
  22. return 0;
  23. }
  24.  
  25.  
  26. void llenar( int *ptrVector ){
  27. int i;
  28. srand( time(NULL) );
  29.  
  30. printf( "\n" );
  31.  
  32. for( i=0; i<MAX; i++){
  33. *(ptrVector+i) = rand() % 100;
  34. }
  35. }
  36.  
  37. void mostrar( int const *ptrVector ){
  38. int i;
  39.  
  40. printf( "\n" );
  41.  
  42. for( i=0; i<MAX; i++){
  43. if( i % 5 == 0 ){
  44. printf( "\n" );
  45. }
  46. printf( "   %2d", *(ptrVector+i) );
  47. }
  48.  
  49. printf( "\n   ----------------------" );
  50.  
  51. }
  52.  
  53. void sumar( int const *ptrVector ){
  54. int i; //resultado=0, indice;
  55. //indice = Fila*Numero de columnas + Columna
  56.  
  57. printf( "\n" );
  58.  
  59. for( i=0; i<MAX; i++){
  60. }
  61.  
  62. printf( "\n---------------" );
  63.  
  64. }

En cuanto a la función sumar todavía no lo logro, pero ya va a salir, seguramente. -

Saludos y como siempre muchas gracias. -










Título: Re: Diferencia con puntero a vector en lenguaje C (dentro y fuera de main).
Publicado por: MAFUS en 29 Septiembre 2016, 20:42 pm
Si tu tipo de dato es int (*)[MAX] eso es lo que debes pasarle a las funciones.

Código
  1. void llenar( int (*ptrVector)[MAX] );
  2. void mostrar( int  const (*ptrVector)[MAX] );
  3. void sumar( int const (*ptrVector)[MAX] );
Entonces podrás usar el tipo de dato como lo hacías con el primer ejemplo.

Sobre la suma, adelante, suerte y al toro.


Título: Re: Diferencia con puntero a vector en lenguaje C (dentro y fuera de main).
Publicado por: NOB2014 en 29 Septiembre 2016, 21:59 pm
Hola.
Bien entendí y funciona a la perfección, por si alguien más tiene el mismo inconveniente se debe quitar el asterisco de la llamada a las distintas funciones, no sé explicar el porqué. -  

Código
  1. llenar( ptrVector );

Saludos.


Título: Re: Diferencia con puntero a vector en lenguaje C (dentro y fuera de main).
Publicado por: MAFUS en 29 Septiembre 2016, 22:04 pm
ptrVector es el nombre de la variable tipo int (*)[MAX].

Es lo mismo que a
Código:
void f(int a);
la llamas con
Código:
int a;
// ...
f(a);